【发布时间】:2013-08-01 19:50:25
【问题描述】:
我有一个存储过程,它从表 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,我该如何防止这种情况发生?
提前感谢您的信息!
【问题讨论】:
-
我想在考虑了一段时间之后,如果我将更新更改为 UPDATE A set val = v+1;我将让并发进程都设置值,但他们会将其设置为相同的值。
-
你的意思是
Select ID from B where total > v;(不是val)? -
是的,它反对 v 而不是 val... 编辑帖子
标签: mysql database-concurrency