0

示例:我有一个表 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(与第一个事务相同的记录),会发生死锁吗?

在乐观锁中进行事务的正确方法是什么?解决方案可以只使用存储过程吗?

4

0 回答 0