脏读、不可重复读、幻读

脏读:脏读又称无效数据的读出,是指在数据库访问中,事物T1将某一值修改,然后T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。

不可重复读:不可重复读,是指在数据库访问中,一直事物范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事物修改的提交而引起的。比如事物T1读取某一数据,事物T2读取并修改了该数据,事物T1为了对读取值进行检验而在此读取该数据,便得到了不同的结果。

一种更容易理解的说法是:在一个事物内,多次读同一个数据。在这个事物还没有结束时,另一个事物也访问该数据。那么,在第一个事物的两次读数据间。由于第二个事物对数据的修改,那么第一事物读到的数据可能不一样,这样就发生了在一个事物内两次读到的数据是不一样的因此称为不可重复读,即原始读取不可重复。

幻读:幻读是指当事物不是独立执行时发生的一种现象。

事物A读取与搜索条件相匹配的若干行。事物B以插入或删除的方式来修改事物A的结果集,然后再提交。

例如第一个事物对表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事物也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事物的用户发现表中还存在没有修改的数据行,就好像发生了幻觉一样。一般解决幻读的方法是增加范围锁Rangs,锁定检索范围为只读,这样就避免了幻读

原文地址:https://www.cnblogs.com/yizw/p/10430060.html