共享锁浅析

共享锁浅析

1 前言

数据库大并发操作要考虑死锁和锁的性能问题,看到网上大都语焉不详,在这里我想重新梳理一下共享锁,这里用T1代表数据库执行请求,T2代表另一个请求,T3,T4以此类推。

2 共享锁(s锁)

T1: select * from table (请想象它需要执行1个小时之久,后面的sql语句请都这么想象) T2: update table set column1=‘hello’ 过程: T1运行 (加共享锁) T2运行 If T1 还没执行完 T2等… else 锁被释放 T2执行 endif T2之所以要等,是因为T2在执行update前,试图对table表加一个排他锁, 而数据库规定同一资源上不能同时共存共享锁和排他锁。所以T2必须等T1 执行完,释放了共享锁,才能加上排他锁,然后才能开始执行update语句。

T1: select * from table T2: select * from table 这里T2不用等待T1执行完,而是可以马上执行。 分析: T1运行,则table被加锁,比如叫lockA T2运行,再对table加一个共享锁,比如叫lockB。 两个锁是可以同时存在于同一资源上的(比如同一个表上)。这被称为共享锁与共享锁兼容。这意味着共享锁不阻止其它session同时读资源,但阻 止其它session update。

T1: select * from table T2: select * from table T3: update table set column1=‘hello’ 这次,T2不用等T1运行完就能运行,T3却要等T1和T2都运行完才能运行。 因为T3必须等T1和T2的共享锁全部释放才能进行加排他锁然后执行update 操作。

以上是自己对于共享锁的简单记录,以后再来详细理一下各种锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值