脏读,幻读和不可重复读

脏读:

当一个事务A正在访问数据,并修改了数据,还没提交到数据库中。此时,另一个事务B也访问了这个数据,然后使用这个数据。

 e.g.
        1.Mary的原工资为1000, 财务人员将Mary的工资改为了8000(但未提交事务)
        2.Mary读取自己的工资 ,发现自己的工资变为了8000,欢天喜地!
        3.而财务发现操作有误,回滚了事务,Mary的工资又变为了1000
          像这样,Mary记取的工资数8000是一个脏数据。

幻读:

当两个用户同时修改同一个数据表时,当一个用户A修改了一些项,另一个用户B添加了一些项。A再次查询时,发现多了一些项。

   e.g.
   目前工资为1000的员工有10人。
   1.事务1,读取所有工资为1000的员工。
   2.这时事务2向employee表插入了一条员工记录,工资也为1000
   3.事务1再次读取所有工资为1000的员工 共读取到了11条记录,

解决办法:如果在操作事务完成数据处理之前,任何其他事务都不可以添加新数据,则可避免该问题

不可重复读:

一个事务A内,多次读取同一个数据,A还没有结束。另一个事务B修改了数据,事务A前后读取相同的数据,结果不同。

    e.g.
    1.在事务1中,Mary 读取了自己的工资为1000,操作并没有完成
    2.在事务2中,这时财务人员修改了Mary的工资为2000,并提交了事务.
    3.在事务1中,Mary 再次读取自己的工资时,工资变为了2000

 解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免该问题。

原文地址:https://www.cnblogs.com/firestar277/p/14496739.html