脏读
是指一个事物A访问数据、并且对数据进行了修改、而这个数据还没有提交到数据库,这时事物B也访问这个数据,并且使用了这个数据。
张三工资为5000,事务A把他的工资改为8000,但是事务A尚未提交。
此时,事务B正在读取张三的工资,读取到张三的工资为8000,
事务A发生异常,回滚了事务,张三的工资又回滚为5000,
事务B读到张三的工资为8000的数据即为脏数据,事务B做了一次脏读。
不可重复读
是指在一个事务内、多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么在第一个事务中两次读到的数据之间,由于第二个事务之间产生了修改,
那么第一个事务两次读到的数据可能不一样,导致一个事务内两次读到的数据不一样。
在事务A中,读取到张三的工资为5000,业务没有处理完,事务没有提交
在此同时,事务B把张三的工资改为8000,并提交了事务
在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中前后两次读到的数据不一致,导致了不可重复读。
幻读
事务A读取与搜索条件相匹配的若干行。事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。>那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。