Mysql共享锁, 排他锁和意向锁的简单总结

共享锁(Share Lock)

  1. 共享锁又称读锁, 缩写(S)锁. 共享锁可以重复加, 但与排他锁(X)是有冲突的, 也就是只读
  2. 使用语法: SELECT … LOCK IN SHARE MODE;

排他锁(Exclusive Lock)

  1. 排他锁又称写锁, 缩写(X)锁. 排他锁加了, 不允许加其它任何锁
  2. 使用语法: SELECT … FOR UPDATE;

意向锁(Intent Lock)

  • 意向锁是表级锁, 在事务中, 用户申请加行锁时, 数据库会默认先申请意向锁, 也就是数据库自动处理意向锁的.

InnoDB的两种表意向锁

  1. 意向共享锁(Intent Share Lock), 缩写(IS)锁
  2. 意向排他锁(Intent Exclusive Lock), 缩写(IX)锁

加锁过程说明

  1. 未加意向锁时: 某 A用户事务中加了行锁, 之后某 B用户申请加表锁, 此时 B用户的请求在数据库内处理冲突的步骤, 首先判断是否已被其它事务加了表锁, 再判断表中是否有个行已被加了行锁, 遍历整张表
  2. 有意向锁时: A用户事务中申请意向共享锁, 成功后再申请行锁, 之后 B用户申请加表锁, 此时 B用户的请求在数据库内处理冲突的步骤, 首先判断是否已被其它事务加了表锁, 然后会发现已有意向共享锁锁住了某个行, B进入阻塞, 直到 A释放指定行锁
  • 能看出未加意向锁时, 可能会有整表遍历, 导致加锁的性能损失会很严重

各锁之间兼容详情表

- S X IS IX
S 兼容 冲突 兼容 冲突
X 冲突 冲突 冲突 冲突
IS 兼容 冲突 兼容 兼容
IX 冲突 冲突 兼容 兼容

如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!

发布了62 篇原创文章 · 获赞 325 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qcl108/article/details/103703402