假设我有一个购买交易做这样的事情:
START TRANSACTION;
UPDATE `USER` SET `Money` = `Money - '100';
UPDATE `ITEMS` SET `Item` = `Item` + '1';
COMMIT;
不幸的是,同时一个cron跑了,对每个人现有的平衡感兴趣:
UPDATE `USER` SET `Money` = `Money` + '50';
(包含在事务中或只包含一个自动提交)
这会导致任何情况下的僵局吗? (这可以通过dbms回滚一个来解决)
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
死锁需要:
理论上可能发生在您的场景中,如果您的锁不在整个表上(但更精细)并且更新USERS表的访问策略不同(以不同的顺序处理表的物理页面) )。在这种情况下,这将是非常奇怪的,但是,以任何方式依赖于假设的查询处理内部行为绝不是一个好主意。