% mysql --version
mysql Ver 14.14 Distrib 5.5.29, for debian-linux-gnu (x86_64) using readline 6.2
CREATE TABLE innodb_lock_monitor(a int) ENGINE=InnoDBBEGIN- ロックを獲得するクエリを実行
SHOW ENGINE INNODB STATUSのTRANSACTIONSを読むROLLBACK-
- に戻ってクエリ実行を繰り返す
mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`a` int(11) NOT NULL,
`b` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`b`),
KEY `a` (`a`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
mysql> SELECT * FROM t;
+-----+---+
| a | b |
+-----+---+
| 16 | 1 |
| 32 | 2 |
| 48 | 3 |
| 64 | 4 |
| 80 | 5 |
+-----+---+
(おそらく主キーの全ノードに対してネクストキーロックがかかりそう)
SELECT * FROM t FOR UPDATEaの 16, 32, 48, 64, 80, sup にネクストキーロックPRIMARYの 1, 2, 3, 4, 5 にレコードロック
SELECT * FROM t WHERE a IN (16, 32) FOR UPDATEaの 16, 32 にレコードロックPRIMARYの 1, 2 にレコードロック
SELECT * FROM t WHERE a < 48 FOR UPDATEaの 16, 32, 48 にネクストキーロックPRIMARYの 1, 2, 3 にレコードロック
SELECT * FROM t WHERE a <= 48 FOR UPDATEaの 16, 32, 48, 64 にネクストキーロックPRIMARYの 1, 2, 3, 4 にレコードロック
SELECT * FROM t WHERE a >= 48 FOR UPDATEaの 48 にレコードロックaの 64, 80, sup にネクストキーロックPRIMARYの 3, 4, 5 にレコードロック
SELECT * FROM t WHERE a > 48 FOR UPDATEaの 64, 80, sup にネクストキーロックPRIMARYの 1, 2, 3 にレコードロック
SELECT * FROM t WHERE a < 32 ORDER BY a DESC FOR UPDATEaの 16 にネクストキーロックaの 32 の直前にギャップロックPRIMARYの 1 にレコードロック
SELECT * FROM t WHERE a <= 32 ORDER BY a DESC FOR UPDATEaの 16, 32 にネクストキーロックaの 48 の直前にギャップロックPRIMARYの 1, 2 にレコードロック
SELECT * FROM t WHERE a >= 64 ORDER BY a DESC FOR UPDATEaの 48, 64, 80, sup にネクストキーロックPRIMARYの 3, 4, 5 にレコードロック
SELECT * FROM t WHERE a > 64 ORDER BY a DESC FOR UPDATEaの 64, 80, sup にネクストキーロックPRIMARYの 4, 5 にレコードロック
SELECT * FROM t WHERE a = 16 FOR UPDATEaの 16 にネクストキーロックaの 32 の直前にギャップロックPRIMARYの 1 にレコードロック
SELECT * FROM t WHERE a = 0 FOR UPDATEaの 16 の直前にギャップロック
SELECT * FROM t WHERE a = 20 FOR UPDATEaの 32 の直前にギャップロック
SELECT * FROM t WHERE a = 100 FOR UPDATEaの sup にネクストキーロック
(ユニークキーによる行ロックのみ)
(ユニークキーによる行ロックのみ)
SELECT * FROM t WHERE b = 1 FOR UPDATEPRIMARYの 1 にレコードロック
- 複合キー
- LIMIT
- JOIN
- サブクエリ