gpt4 book ai didi

Mysql - 存储过程并发问题

转载 作者:行者123 更新时间:2023-11-30 23:15:40 24 4
gpt4 key购买 nike

我有一个存储过程,它从表 A 中选择值,然后用于从表 B 中选择。如果行数小于阈值,它会更新表 A 的值并重新选择表 B。

Select val into v from A;
Select ID from B where total > v;

if (Found_Rows() < 3) then
Update A set val = val +1;
end if;

我担心的是,当同时命中此存储过程并且行数 > 3 并且更新运行多次时。

那么首先,这会发生吗?如果是这样,我该如何防止这种情况发生,因为存储过程中不允许使用 Lock?

提前感谢您提供信息!

最佳答案

您正在无条件地更新整个表A。因此(即使使用 InnoDB)整个表将在更新时以独占模式锁定。该锁由引擎自动获取和释放。

所以你是安全的,并发明智的。尝试从 A 读取数据时,所有并发线程都将暂停,直到更新完成。

但是(与您最后的评论相反),所有 UPDATE 都将按顺序发生,并且每个更新都会递增 A.val

关于Mysql - 存储过程并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18003248/

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