脏读、幻读、不可重复读的区别
1.脏读
脏读就是指当一个事务正在访问数据,并对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问了这个数据,然后使用了这个数据。
2.不可重复读
在一个事务内,多次读取同一数据。这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在同一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读取到的数据可能存在差异。这样就发生了在一个事务内两次读取到的数据是不一样的,因此称之为不可重复读。
3.幻读
指当前的事务不是独立执行时发生的一种现象,例如:第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改了这个表中的数据,这种修改是向表中插入一行新数据。那么,就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好像发生了幻觉一样。
总结
脏读:强调的是第二个事务读到的不够新。
幻读的重点在于新增或者删除:同样的条件 , 第 1 次和第 2 次读出来的记录数不一样
不可重复读的重点是修改:同一事务,两次读取到的数据不一样。