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


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需要先判断有没有冲突的表锁,然后判断表中每一行有没有冲突的行锁,这种方式效率很低。而有了意向锁之后,意向锁作为一个表级锁,可以极高效率地判断锁冲突情况。

 

间隙锁

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM