首页 > 其他 > 详细

表锁、行锁、意向锁和间隙锁

时间:2020-09-13 15:18:40      阅读:64      评论:0      收藏:0      [点我收藏+]

MySQL不支持锁升级,要一次获取所有需要的锁。

 

表锁

MyISAM中的表锁。写请求比读请求优先级高。

表共享读锁(Table Read Lock):lock tables xxx read local

表独占写锁(Table Write Lock):lock tables xxx write

concurrent_insert:控制并发插入行为,配合read local。

  0:不允许并发插入。

  1:如果表中没有空洞(表中间没有被删除的行),允许在一个进程读表的同时,另一个从表尾插入(默认)

  2:无论有没有空洞,都允许表尾插入。

 

行锁

InnoDB下,是给索引加行锁,如果没有通过索引条件检索数据,则会使用表锁。

共享锁(S):lock in share mode

排他锁(X):for update

 

意向锁

表级锁,在获得一个锁之前,会先申请获得其意向锁,来阻塞其他冲突的锁请求。

假设线程A获得一个行锁,此时线程B想获得一个表锁,如果没有意向锁,则线程B需要先判断有没有冲突的表锁,然后判断表中每一行有没有冲突的行锁,这种方式效率很低。而有了意向锁之后,意向锁作为一个表级锁,可以极高效率地判断锁冲突情况。

 

间隙锁

锁住满足索引条件检索的区间,其他事务插入该区间内的数据时会失败,解决了幻读的问题。

表锁、行锁、意向锁和间隙锁

原文:https://www.cnblogs.com/kunwu/p/13661178.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!