如果我有两个线程在单独的事务中使用看起来像
的语句更新数据库线程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执行一个原子语句(或者它是否因数据库而异)?
答案 0 :(得分:1)
如果DBMS没有将更新实现为原子语句,那将是一种非常糟糕的形式,但值得为您确定特定环境的验证。