2010-01-20 (水)
*MySQL Next-Key Locking
日本語の説明は分かりにくいけど,英語の説明は明快なので s/ja/en/した方がいいかも.
重要なのは存在しない行のロックでこのアルゴリズムが使われることです.
つまり,
CREATE TABLE test(id int primary key) type=InnoDB; INSERT INTO test VALUES(1),(2),(9),(10);
こんな感じのテーブルがあって,
BEGIN; SELECT id FROM test WHERE id=5 FOR UPDATE; INSERT INTO test VALUES(5); COMMIT;
このよくありそうなトランザクションの実行中に,他のトランザクションでid=6のロックに失敗します.