MySql InnonDB锁(未全部完成)

分享锁和分享锁(Shared and Exclusive Locks)

分享锁(S) 允许事务持有读取一行记录的锁

独占锁(X) 允许事务持有更新和删除一样记录的锁

当一个事务获取了一条记录的分享锁,则另一个事务只能立即获取到该记录的分享锁,而不能得到该记录的独占锁

当一个事务获取了一条记录的独占锁,则另一个事务不能立即获得该记录的任何锁

当一个事务尝试获取一个无法获得的琐时,该事务将阻塞,直到另一个事务释放对应的为止

意向锁(Intention Locks)

意向分享锁(IS):当用户将要获取个别记录的S锁时给记录加上该锁 ( SELECT ... LOCK IN SHARE MODE )

意向独占锁(IX):当用户将要获取个别记录的X锁时给记录加上该锁 ( SELECT ... FOR UPDATE )

意向锁协议:

如果要获取S锁,则必须先获取IS锁或者优先级更高的锁

如果要获取X锁,则必须先获取IX锁

意向锁不会阻塞其他事物除了对整张表的请求,如:LOCK TABLES ... WRITE

意向锁主要作用展示表内记录是否已被锁,或将被锁

记录锁(Record Locks)

记录锁总是使用在一个有索引的记录上

例如 SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE

记录所可以防止其他任何事物对 t 表中c1 = 10的记录进行新增、修改或删除

间隙锁(Gap Locks)

间隙锁在两个索引记录之间,或者第一条索引记录之前,或者最后一条索引记录之后

间隙锁防止其他事务插入锁范围内的值

例如:SELECT c1 FROM t WHERE c1 BETWEEN 10 and 20 FOR UPDATE

间隙锁防止插入c1值在10到20之间的值

如果一个查询用到了记录锁,则其不会获取间隙锁

间隙锁只纯粹的防止插入

Next-Key Locks


插入意向锁(Insert Intention Locks)


自增锁(Auto-Inc Locks)


谓词逻辑锁(Predicate Locks)



参考 https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-shared-exclusive-locks


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值