数据库读锁和写锁详解

myInoDB 支持事务,会产生脏读和幻读和不可重复读。

mysql支持四种事物隔离级别,默认:可重复读。

select * ,  select * for update,select * in share mode

一般用select * 就行了,默认读快照版本问题不大。

比较严格为了保证数据students和books 数据一致性,多表的数据一致性,可以用 share mode。

参考好文: https://www.cnblogs.com/itZhy/p/8417763.html

select .. for update还会阻塞其他事务对结果集最新版本的读取。

业务层面在什么情况下需要阻塞其他事务对结果集最新版本的读取呢?

 select ... for update

本读取模式拥有select ... in share mode的一切功能,同时它还额外具备阻止其他事务读取最新版本的能力

本读取模式在读取前后对资源的处理如下:

1. 读取行为发生之前,获取写锁。这意味着如果有其他尚未提交的事务已经修改了结果集,本读取模式会等待这些事务结束,以确保自己稍后可以读取到这些事务对结果集的修改。

2. 读取行为发生之后,当前事务提交之前,本读取模式会阻塞其他事务对结果集的修改,也会阻塞其他事务对结果集最新版本的读取(注:其他事务仍可以读取快照版本)

3. 当前事务提交后,释放写锁。这意味着所有之前被阻塞的事务可恢复继续执行。

不想让别人也可以读取到最新版本,往往是因为自己想在最新版本上进行修改,同时担心其他人也和自己一样。因为大家在修改数据时,总是希望自己的修改与数据的最新版本(而不是历史版本)合并后存入数据库中,所以大家在修改数据前,都会尝试获取数据的最新版本,基于最新版本进行修改。如果每个人都可以同时获取到数据的最新版本并在最新版本上加入自己的修改,最后大家一起提交数据,必然会出现一个人的修改覆盖了其他人修改的情况,这就是经典的“更新丢失”问题。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值