У меня есть два сценария, ограниченных транзакциями:
Первый:
START TRANSACTION;
update product set price = 70;
SELECT SLEEP(20);
rollback;
Второй:
START TRANSACTION;
insert into product_order(product_id, amount, price) select id, amount, price from product;
commit;
Вторая транзакция начала выполняться, когда первая находится в состоянии сна.
Итак, я ожидал, что вторая будет выполнена во время сна первой транзакции.
Неожиданно вторая транзакция ожидает, пока первая не выйдет из состояния сна.
Я знаю, что это связано с блокировкой строк. Но я не обновил строки, включенные в первую транзакцию.
Мой вопрос: в чем причина такого поведения и как я могу от него избавиться?