Я получил сообщение о тупике в нашей системе и попытался воспроизвести его на простом примере:
create table db.deadlock (id int primary key auto_increment, val int);
insert into db.deadlock (val) values (1);
insert into db.deadlock (val) values (2);
insert into db.deadlock (val) values (3);
insert into db.deadlock (val) values (4);
// CLIENT 1
START TRANSACTION;
DELETE FROM db.deadlock WHERE val in (1,2);
// CLIENT 2
START TRANSACTION;
DELETE FROM db.deadlock WHERE val in (3,4);
Я получил такое же тупиковое сообщение. Но я не понимаю, почему это произошло? Похоже, где in () блокирует всю таблицу, а не выбранные строки.
Я также не могу найти объяснения в mysql документах. Может кто-нибудь поделится описанием такого поведения?