mysql locking

Posted gm-201705

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql locking相关的知识,希望对你有一定的参考价值。

1. 意向锁

https://dev.mysql.com/doc/refman/5.7/en/innodb-locking.html#innodb-insert-intention-locks

官方文档,意向锁是Innodb为了支持多种粒度锁(表锁+行锁)设计的。

举例:

一个表 tab1

id, name

2, "xxxx"

id是unique key。

事务T1 select ... from tab1 where id=2 for update.

事务T2 lock tab1 .... write。

若无意向锁,事务T2需扫描表的每一行,看下是否有锁。

有了意向锁后,T2只需判断与T1的意向锁是否兼容即可。

 

2. Gap锁

Gap locks in InnoDB are purely inhibitive”, which means that their only purpose is to prevent other transactions from inserting to the gap. Gap locks can co-exist. A gap lock taken by one transaction does not prevent another transaction from taking a gap lock on the same gap. There is no difference between shared and exclusive gap locks. They do not conflict with each other, and they perform the same function.

 

3. Next-Key Locks

是Gap锁 与 Record Locks的结合,区间为前开后闭。如一个index 有10, 11, 13, and 20几条记录,则可能存在的Next-Key Locks是:

(negative infinity, 10]

(10, 11]

(11, 13]

(13, 20]

(20, positive infinity)

Next-Key Locks用于RR事务隔离级别,解决幻读问题。

 

以上是关于mysql locking的主要内容,如果未能解决你的问题,请参考以下文章

为啥mysql里有些查询会出现locked呢

部分代码片段

线程基础四 使用Monitor类锁定资源

linux中怎么查看mysql数据库版本

Java多线程与并发库高级应用-工具类介绍

从mysql的片段中加载ListView