如果我有两个线程在单独的事务中更新数据库,语句看起来像
线程 1
UPDATE people set id='12346' WHERE name='Jeff'
线程 2
UPDATE people SET name = 'Jeff' WHERE id='12345'
显然这里有一场比赛。如果线程 1 在线程 2 之前更改了 id,则 12345 将是无效的 ID(假设没有其他人在使用它)。
我想知道的是,在使用乐观锁定时,这是一种可能引发乐观锁定错误的情况(例如,过时的记录错误)吗?UPDATE/WHERE 是否构成读取和写入,或者每个 UPDATE 是否执行原子语句(或者它是否因数据库而异)?