-
18-09-2019 - |
题
这不会引起竞争条件与MySQL(少):
启动交易。
尝试得到记录。
如果记录不存在,返回。
如果记录存在,删除它,并添加一个日志条目说是已被删除。
结束交易(承诺/rollback).
是否有可能为另一个进程开始之前删除一步2b、检测存在的记录,然后有两个过程的输入项目删除的项目成本日志?
是否有任何防范措施,我需要走?
谢谢。
解决方案
使用"选择"用于更新在第2步。只有一个进程将能够获得锁上排,从而避免了这种情况下,你的描述。
其他提示
熟练工人的程序员,我相信,有正确的解决方案。因为你表示你正在使用一个虚格林工具(一个不会让你来查询更新)我建议你移动你的插入的记录表进入一个触发器上删除操作,所以你会避免重复输入。
启动交易。
删除记录/*使用同样的标准使用'尝试得到记录'*/
如果回应的指示的记录确实被删除,增加一个日志条目。
结束交易(承诺/rollback).
没有更多的竞争条件。
是的,这是可能用于另一交易的检查表之后已经阅读它。
更糟糕的是,因为交易的工作,即使删除该行,任何新的交易,开始将看到行因为你还没有致力于该删除。
SELECT ... FOR UPDATE
是的一种方式防止它。
LOCK TABLE tablename
是另一个。
不幸的是,因为你使用一个奥姆,我不能说它是否有能力做到这些.
不隶属于 StackOverflow