面试的时候碰到了此类问题,此前认知一直模棱两可,特在此从新学习总结一下:面试
一、脏读:指当一个事务正在访问数据,而且对数据进行了修改,而这种修改尚未提交到数据库中,这时,另一个事务也访问这个数据,而后使用了这个数据。
例如:
张三的工资为5000,事务A中把他的工资改成8000,但事务A还没有提交。
与此同时,
事务B正在读取张三的工资,读取到张三的工资为8000。
随后,
事务A发生异常,而回滚了事务。张三的工资又回滚为5000。
最后,
事务B读取到的张三工资为8000的数据即为脏数据,事务B作了一次脏读。数据库
二、不可重复读:是指在一个事务中两次读取的数据由于另外一个事务的影响而不一样的状况。
例如:
在事务A中,读取到张三的工资为5000,操做没有完成,事务还没提交。
与此同时,
事务B把张三的工资改成8000,并提交了事务。
随后,
在事务A中,再次读取张三的工资,此时工资变为8000。在一个事务中先后两次读取的结果并不致,致使了不可重复读。学习
三、幻读:是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的所有数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,之后就会发生操做第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉同样。(针对新增和修改的状况下多条数据)
例如:
目前工资为5000的员工有10人,事务A读取全部工资为5000的人数为10人。
此时,
事务B插入一条工资也为5000的记录。
这是,事务A再次读取工资为5000的员工,记录为11人。此时产生了幻读。事务
第一类丢失更新总结
A事务撤销时,把已经提交的B事务的更新数据覆盖了(一个撤销的事务覆盖了另外一个成功提交的事务);数据
第二类丢失更新异常
A事务覆盖B事务已经提交的数据,形成B事务所作的操做丢失 (一个成功提交的事务影响了另外一个成功及提交的事务)