我有 2 个程序在 2 台不同的机器上运行。
每个程序都有一个称为 updateRecord 的方法,它执行以下两件事:
1. 对特定记录 Z
执行 SELECT 查询
2. 对同一条记录进行更新查询。
如果这 2 个查询在同一个事务中(在 beginTransaction 和 commitTransaction 之间),它能保证正确执行吗?
即,以下操作序列是否会无法成功执行?
- Prog-1 选择
- Prog-2 选择
- Prog-1 更新
- Prog-2 更新
或
- Prog-1 选择
- Prog-1 更新
- Prog-1 选择
- Prog-2 更新
- Prog-1 提交
- Prog-2 提交
最佳答案
您的程序需要在选择记录时锁定记录 - 例如使用 SELECT FOR UPDATE 语法。这样,记录将被锁定,直到 UPDATE 完成。
关于mysql - 并发/同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1807157/