gpt4 book ai didi

mysql - 插入从锁定行中获取的值的问题

转载 作者:行者123 更新时间:2023-11-30 21:35:27 25 4
gpt4 key购买 nike

我有两个受交易限制的脚本:

第一个:

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;

当第一个事务处于“ sleep ”状态时,第二个事务已开始执行。

因此,我预计第二个交易将在第一个交易休眠期间执行。出乎意料的是,第二个事务一直在等待,直到第一个事务从 sleep 状态中退出。我知道它与行锁定有关。但是我没有更新包含在第一笔交易中的行。

我的问题:这种行为的原因是什么,我该如何摆脱它?

最佳答案

好像事务结束后会释放锁(不能读取数据因为事务失败数据库要回滚到之前的状态)

在插入之前,您应该设置 session 事务隔离级别,以便它可以读取未提交的数据:

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

START TRANSACTION;
insert into product_order(product_id, amount, price) select id, amount, price from product;
COMMIT;

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

关于mysql - 插入从锁定行中获取的值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54110325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com