单个更新语句中的乐观锁定

时间:2012-11-06 01:10:51

标签: database transactions

如果我有两个线程在单独的事务中使用看起来像

的语句更新数据库

线程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执行一个原子语句(或者它是否因数据库而异)?

1 个答案:

答案 0 :(得分:1)

如果DBMS没有将更新实现为原子语句,那将是一种非常糟糕的形式,但值得为您确定特定环境的验证。