MYSQL事务有四种隔离机制
1.Read Uncommitted
最低级别的隔离机制,其他事务可以读取到当前事务未提交的数据。这种隔离机制保证了别的事务能读取到当前最新的数据,但不一定是准确的,因为事务可能会回滚。
出现的问题:脏读,幻读,不可重复读。
因为别的事务读取到的不一定是要提交的数据。当前事务如果发生回滚就会引起脏读,幻读,不可重复读问题。
应用场景:一些实时性较高(读取未提交的数据),但是可以允许数据出现偏差的场景(事务回滚)。
2.Read Committed
相较于前一种隔离机制解决了脏读问题。其他事务仅能读取到已经提交的数据。保证了读取到的数据都是已经处理完成的数据。但是不能解决不可重复读和幻读问题。
出现的问题:幻读,不可重复读。
不可重复读:当前事务读取到一条记录,别的事务在当前事务处理的过程中对这条记录修改了并且已经提交了,导致当前事务再次查询时读取到的数据不一致了。
幻读:在范围查询的时候有别的事务把范围内的数据删除了,再次范围查询就查询到的结果不一致。
应用场景:比如在交易系统中能确保查到的钱,是已经在数据库中准确的钱财
3. Repeatable Read
相较于前一种隔离机制解决了不可重复读的问题。其他事务不能对当前事务查询到的数据进行修改。这就解决了不可重复读的问题。因为每次查询到的数据都是一样的。但是范围查询的时候还是会出现幻读问题。
应用场景:对数据一致性要求较高的场景。在预订系统中,多个用户可能同时查询和预订某个资源(例如机票、酒店房间等)。使用 Repeatable Read 隔离级别可以确保每个用户查询到的资源状态是一致的,避免出现并发冲突和不一致的预订结果。
4.Serializable
序列化查询。保证了范围查询的精准性。