1 事务并发可能出现的情况
1.1 脏堵
一个事务读到另一个事务未提交事务修改过的数据(脏读只在读未提交隔离级别才会出现)
1.2 不可重复读
一个事务能读到另一个已经提交的事务修改过的数据,并且其他事务每对该事务进行一次修改并提交后,该事务都能查询得到最新值。(不可重复读在读未提交和读已提交隔离级别都可能会出现)
1.3 幻读
一个事务先根据某些条件查询出一些记录,之后另一个事务又向该表中插入了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另一个事务插入的记录也读出来。(幻读在读未提交、读已提交和可重复读隔离级别都可能出现)
2 事务的隔离级别
2.1 可串行化
各种问题(脏读、不可重复读、幻读)都不会发生,通过加锁实现(读锁和写锁)。
2.2 读未提交
在读未交隔离级别下,事务A可以读取到事务B修改过但是未提交的数据。可能发生脏读、不可重复读和幻读。
2.3 读已提交
在读已提交隔离级别下,事务B只能在事务A修改过并且已提交后才能读取到事务B修改的数据。
2.4 可重复读
在可重复读隔离级别下,事务B只能在事务A修改过数据并提交事务后,自己也提交事务后,才能读取到事务B修改的数据。可重读读隔离级别解决了脏读和不可重复读的问题,但可能发生幻读问题。
四种隔离级别比较
文章来源: 彻底搞懂 MySQL 事务的隔离级别