示例:我有一个表 A(id、版本和一个字段)和一个表 B(id、版本和一个字段)。
我需要进行编辑记录 A 和记录 B 的事务。
- 开始交易
- update tableA set field='aaa', version=version+1 where id=1 and version=savedversion -if recordupdated=0 then rollback
- update tableB set field='bbb', version=version+1 where id=1 and version=savedversion -if recordupdated=0 then rollback
- 犯罪
但是如果我有另一个线程需要以相反的顺序更新表(在复杂的环境中,开发人员可能不遵守策略),或者需要更新表 A(与第一个事务不同的记录) ,然后表B(与第一个事务相同的记录),然后A(与第一个事务相同的记录),会发生死锁吗?
在乐观锁中进行事务的正确方法是什么?解决方案可以只使用存储过程吗?