数据库的脏数据?加锁? 数据库事务隔离级别和锁实现机制

参考:

http://comedsh.iteye.com/blog/698733

 

并发操作数据库,遇到的问题

1、丢失更新  
如果两个事务都要更新数据库一个字段X,x=100

事务A事务B
读取X=100 读取X=100
写入x=X+100写入x=X+200
事务结束x=200 事务结束x=300
 最后x=300

 

 

 

 

 

 

 

 

两个不同事物同时获得相同数据,然后在各自事务中同时修改了该数据,那么先提交的事务更新会被后提交事务的更新给覆盖掉,这种情况事务A的更新就被覆盖掉了、丢失了。

2、脏读(未提交读) 
防止一个事务读到另一个事务还没有提交的记录。 如:

事务A   事务B
 写入x=X+100 (x=200)
读取X=200 (读取了事务B未提交的数据)   
 事务回滚x=100 
 事务结束x=100
事务结束 

              
       

  

 

 

 

 

 

事务读取了未提交的数据,事务B的回滚,导致了事务A的数据不一致,导致了事务A的脏读 !

3、不可重复读
一个事务在自己没有更新数据库数据的情况,同一个查询操作执行两次或多次的结果应该是一致的;如果不一致,就说明为不可重复读。
还是用上面的例子

事务A事务B
读取X=100读取X=100
读取X=100 写入x=X+100
 事务结束, x=200
读取X=200
(此时,在同一个事务A中,读取的X值发生了变化!)
 
事务结束 

 

 

 

 

 

 

 

 


这种情况事务A多次读取x的结果出现了不一致,即为不可重复读 。

4 幻读(Phantom Read)

事务A读的时候读出了15条记录,事务B在事务A执行的过程中 增加 了1条,事务A再读的时候就变成了 16 条,这种情况就叫做幻影读。
不可重复读说明了做数据库读操作的时候可能会出现的问题。

 

解决办法:加事物全局锁

 

转载于:https://www.cnblogs.com/wjw334/p/4490850.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值