MySQL事务使用REPLACE获取不必要的行锁

时间:2014-10-06 23:05:56

标签: mysql sql transactions locking rdbms

当使用带有唯一键和主键的replace和表时,我遇到了奇怪的行锁行为。我使用read committed作为我的事务隔离级别。

CREATE TABLE x (x int, unique key (x), primary key (x));
INSERT INTO x VALUES (0), (1), (2), (3), (4);

Transaction 1:
REPLACE INTO x VALUES (2);

由于某种原因,这将锁定(1)和(3),但不锁定(0)和(4)。

Transaction 2:
REPLACE INTO x VALUES (3);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
REPLACE INTO x VALUES (4);
Query OK, 2 rows affected (0.00 sec)

我试过在mysql bug数据库中查找这个bug但是找不到任何东西。有人可以解释这种奇怪的行为吗?

0 个答案:

没有答案