MySQLのInnoDBのロックの挙動を色々調べていたのですが、レコードの数によってロックの範囲が変わる現象に頭を悩まされたので、メモがてら少しまとめてみます。 どこまでロックする? 以下のようなテーブルがあるとします。 id列に1〜6までの数値が入っています。 CREATE TABLE t ( `id` int unsigned NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB; INSERT INTO t VALUES (1),(2),(3),(4),(5),(6); ではidが3より小さなレコードを取得するクエリを投げると、どのレコードをロックするでしょうか。 BEGIN; SELECT id FROM t WHERE id < 3 LOCK IN SHARE MODE; 1〜2のレコードでしょうか。それとも1〜3までロックするでしょうか。 実