0
- テーブルfooにはIDと名前があります。
- トランザクションA ID 1による更新を選択します。
- トランザクションBは、ID 1で更新を選択して待機します。
- トランザクションAは、(存在しないにもかかわらず)名前で更新を選択すると、トランザクションBデッドロックが発生します。
これはどうしてですか?MySQLでのdiffrenetキーの原因デッドロックによる同じテーブルへの更新の選択
以下のスクリプトはデッドロックを再現します。
create table foo (id int primary key, name varchar(100));
insert into foo values (1, 'foo1');
-- transaction A
start transaction;
select * from foo where id=1 for update;
-- transaction B
start transaction;
select * from foo where id=1 for update;
-- now waiting
-- transaction A
select * from foo where name='xxxxx' for update;
-- transaction B dead lock occer