1

我有一个存储过程,它从表 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并且更新运行多次时。

那么首先,这会发生吗?如果是这样,由于存储过程中不允许锁定,我该如何防止这种情况发生?

感谢您提前提供信息!

4

1 回答 1

0

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

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

但是(与您的上一条评论相反),所有UPDATE' 将按顺序发生,并且每个都将递增A.val

于 2013-08-01T20:29:51.090 回答