有人可以解释以下InnoDB锁定行为吗?它以READ_COMMITTED模式运行,只有一个表,它具有非重叠的主键和唯一键:
CREATE TABLE test3(
p BIGINT NOT NULL,
u BIGINT NOT NULL,
PRIMARY KEY (p),
UNIQUE KEY(u));
INSERT INTO test3 VALUES(10, 10);
Run Code Online (Sandbox Code Playgroud)
有两个事务正在运行(T2稍后启动).
BEGIN;
INSERT INTO test3 VALUES(20, 20);
Run Code Online (Sandbox Code Playgroud)
T1 然后出于无关原因阻止应用程序代码.
BEGIN;
UPDATE test3 SET p=9 WHERE p=10;
Run Code Online (Sandbox Code Playgroud)
此时T2阻止尝试获取锁定帮助T1.
mysql> SELECT * FROM information_schema.innodb_trx \G;
*************************** 1. row ***************************
trx_id: 158ABD
trx_state: LOCK WAIT
trx_started: 2014-04-23 03:26:43
trx_requested_lock_id: 158ABD:0:312:3
trx_wait_started: 2014-04-23 03:26:43
trx_weight: 6
trx_mysql_thread_id: 6749
trx_query: update test3 set p=9 where p=10 …Run Code Online (Sandbox Code Playgroud)