一个关于主键排他锁的问题
上个星期,周青给我发了一个很神奇的东西。我在不同版本的MySQL上面试了一下,发现都存在这样的现象。以下是截图:

事务1在主键a=7上面加了排他锁,事务2就无法在主键a<=6上面加排他锁了。
初步认为是Next-key lock导致了这个问题。具体原因有待确证。
Tags: exclusive lock, InnoDB, MySQL, Next-key lock, X lock
上个星期,周青给我发了一个很神奇的东西。我在不同版本的MySQL上面试了一下,发现都存在这样的现象。以下是截图:

事务1在主键a=7上面加了排他锁,事务2就无法在主键a<=6上面加排他锁了。
初步认为是Next-key lock导致了这个问题。具体原因有待确证。
Tags: exclusive lock, InnoDB, MySQL, Next-key lock, X lock
September 21st, 2009 at 17:46
是和next key有关。。。
October 29th, 2009 at 09:54
这个也有一个可能是跟执行计划有关系.
当你的表很小时, 第一个SELECT可能走全表扫描的.而导致锁了全表.
你可以试试数据达到一定量了以后,就不会有这种情况.
INNODB,对主键的访问,正常情况下是不会有NEXTKEY锁的.
October 29th, 2009 at 11:37
@Steven.he Says:
好像和全表扫描没有关系,执行计划如下。
mysql> explain select * from test where a=7 for update \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: test
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: const
rows: 1
Extra:
1 row in set (0.00 sec)
January 7th, 2010 at 15:42
[...] 昨天看了realzyy兄的一篇文章一个关于主键排他锁的问题,觉得很有意思,然后做了一些实验: [...]