我有两个由事务绑定的脚本:
第一个:
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;
当第一个事务处于“睡眠”状态时,第二个事务已开始执行。
所以,我预期第二个将在第一个事务的休眠期间执行。出乎意料的是,第二个事务正在等待,直到第一个事务从睡眠状态退出。我知道这和排锁有关。但是我没有更新第一个事务中包含的行。
我的问题是:这种行为的原因是什么?我怎样才能摆脱它?
1条答案
按热度按时间yruzcnhs1#
看起来锁将在事务结束后释放(您无法读取数据,因为如果事务失败,数据库将不得不回滚到以前的状态)
在插入之前,应设置会话事务隔离级别,以便它可以读取未提交的数据: