脏读、幻读、不可重复读

没有对事务进行隔离时会发生脏读、幻读、不可重复读等危害

一.脏读

读取了未提交的数据,针对单笔数据,需进行读提交(Read Committed)才能解决。

例:已知两个事务A和B,B读取了已经被A更新但还没有被提交的数据,A发现出了错误,A回滚事务,B读取的数据就是脏数据。

二.不可重复读

进行了读取,分别读取了事务提交前后不同的数据,重点在于修改和删除,针对单笔数据,需进行可重复读(Repeatable read)才能解决。

例:已知两个事务A和B,同时去取出一张银行卡里面的钱,A先到银行,将所有的钱取出来,并提交了事物,B后到,没法再重复取钱。

三.幻读

进行了读取,分别读取了不同的数据,重点在于新增,针对多笔数据,需进行Serializable 序列化才能解决。

例: 已知有两个事务A和B,A从一个表中读取了数据,然后B在该表中插入了一些新数据,导致A再次读取(多次读取)同一个表, 就会多出几行。

不可重复读和幻读的区别
1.相同点

两者都是对数据进行了两次查询

2.不同点

1.从控制的角度前者只需要锁住满足条件的记录,后者要锁住满足条件及其相近的记录
2.避免不可重复读需要锁行,避免幻读则需要锁表。
3.不可重复读重点在于update和delete,而幻读的重点在于insert。
4.所以说不可重复读和幻读最大的区别,就在于如何通过锁机制来解决他们产生的问题。

可重复读

sql第一次读取到数据后,就将这些数据加锁,其它事务无法修改这些数据,就可以实现可重复读了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值