当使用带有唯一键和主键的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但是找不到任何东西。有人可以解释这种奇怪的行为吗?