小编Kon*_*rov的帖子

为什么更新主键会锁定InnoDB中的唯一键?

有人可以解释以下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稍后启动).

T1

BEGIN;
  INSERT INTO test3 VALUES(20, 20);
Run Code Online (Sandbox Code Playgroud)

T1 然后出于无关原因阻止应用程序代码.

T2

BEGIN;
  UPDATE test3 SET p=9 WHERE p=10;
Run Code Online (Sandbox Code Playgroud)

此时T2阻止尝试获取锁定帮助T1.

Innodb锁定信息

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)

mysql innodb

6
推荐指数
1
解决办法
1909
查看次数

标签 统计

innodb ×1

mysql ×1