数据库并发事务问题图解---Dirty read、Lost to modify、Unrepeatableread、Phantom read

Dirty read

当一个事务A正在访问数据并且对数据进行了修改,但是这次修改还没有提交到数据库中,此时另外一个事务B也访问了这个数据,然后使用了这个数据。因为这个数据还是提交前的数据,此时另一个事务B读到的数据就是“脏数据”。
数据库并发事务问题图解---Dirty read、Lost to modify、Unrepeatableread、Phantom read

Lost to modify

指在一个事务A读取一个数据时,另外一个事务B也访问了该数据,那么在第一个事务A中修改了这个数据后,第二个事务B也修改了这个数据,这样第一个事务内的修改结果就被丢失。

数据库并发事务问题图解---Dirty read、Lost to modify、Unrepeatableread、Phantom read

Unrepeatableread

指在一个事务A内多次读同一数据。在这个事务还没有结束时,另一个事务B也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务B的修改导致第一个事务A两次读取的数据可能不太一样。这就发生了在一个事务A内两次读到的数据是不一样的情况,因此称为不可重复读。
数据库并发事务问题图解---Dirty read、Lost to modify、Unrepeatableread、Phantom read

Phantom read

幻读与不可重复读类似。它发生在一个事务A读取了几行数据,接着另一个并发事务B插入了一些数据时。在随后的查询中,第一个事务B就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。

不可重复读和幻读区别

不可重复读的重点是修改比如多次读取一条记录发现其中某些列的值被修改,幻读的重点在于新增或者删除比如多次读取一条记录发现记录增多或减少了。