2012-11-06 201 views
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执行了一个原子语句(还是因数据库而异)?

+0

更新是SQL Server上的原子语句,我相信大多数其他主要RDBMS –

+0

重复? http://stackoverflow.com/questions/2133393/is-update-with-nested-select-atomic-operation – durron597

+0

这看起来是一个稍微更具体的问题。这似乎只涉及处理并发更新。 – Gian

回答

1

对于DBMS来说,如果不将更新作为原子语句来实现,那将是非常糟糕的形式,但是值得验证的是,您需要确认特定的环境。

+0

谢谢,这是我所假设的但想确认的。 –