InnoDBでのデッドロック検出
Rev.1を表示中。最新版はこちら。
概要
MySQLのInnoDBを使っている場合、トランザクション間でデッドロックが発生した場合は、デッドロックが検出されロールバックが行われるのだが、実際にデッドロックを発生させてみて挙動を確認した。
準備
適当な名前で空のデータベースを作成し、以下のSQLを実行。
-- テスト用テーブル DROP TABLE IF EXISTS test; CREATE TABLE test ( id BIGINT NOT NULL AUTO_INCREMENT UNIQUE, data INT NOT NULL) ENGINE = InnoDB; -- テスト用データ挿入 INSERT INTO test (id, data) VALUES (1, 1000), (2, 2000);
この状態でtestテーブルに以下のようなデータが格納されている。
testテーブルの内容
id | data |
---|---|
1 |
1000 |
2 | 2000 |
デッドロックを発生させてみる
Shellを二つ立ち上げ、それぞれからmysqlコマンドでデータベースに接続し、図xxのような順番でSQLを実行してデッドロックを発生させる。