`

事务隔离级别

    博客分类:
  • db
 
阅读更多

读未提交:在支持事务的数据库中是没有这种情况的

 

读已提交:另一个事务中已经提交的数据在我的事务中就可以读取出来,大多数业务场景都可以使用此隔离级别,此隔离级别会出现不可重复读,幻读,幻读针对新增和删除,一般没有影响,但是不可重复读针对的是更新update,这就可以会导致问题,不可重复读就是在一个事务中两次读取同一行或几行数据,但是返回的值不一样

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

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

不可重读会导致数据不一致,比如在同一个账户,一个事务查询出来1000,然后加500更新为1500,另一个账户查询出来减200变成了800,其实最终结果应该是1300才对(另一个账户查出来如果是1500是对的,但是可能查询出来是1000,就导致了问题,数据明显不是期望的),

要让数据可以重复读,就必须对数据加锁,select * from account where id = 2 for update;

在一个事务更新提交之前另一个事务连查询都查不出来,也就谈不上不可重读了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics