0

如果我有两个线程在单独的事务中更新数据库,语句看起来像

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

4

1 回答 1

1

DBMS 不将更新作为原子语句实现是非常糟糕的形式,但值得为您的特定环境验证这一点以确保。

于 2012-11-06T01:12:55.367 回答