![]() |
1
3
这将很好地锁定,但您可以在一个由三部分组成的平等声明中实现:
|
![]() |
2
1
我的理解是,您的查询不会有竞争条件或并发问题。
不过,我不喜欢使用这种语法,因为它可能会出现以下情况下的问题:
虽然我意识到你可能永远都不想这样做,但它以奇怪的方式断裂(第一行的处理方式与其他行不同)让我害怕相信它。在SQL 2000的某个特定SP中,这种语法也存在一些真正的错误。 如果您想确保行被正确锁定,并且不会发生争用情况,那么下面是一个测试它的好方法。在SSMS/QA中打开多个查询窗口,并在每个窗口中执行以下操作:
这将使您在不同会话中提交的所有批处理基本上在同一时刻运行,这是很难用任何其他方式模拟的。你很快就会得到一个关于是否会发生竞争状况的明确指标。 我推荐一些文章供你进一步阅读。它们与这个问题无关,但绝对相关(在插入和更新中处理竞争条件): |
![]() |
a a · 为什么在这个可重入锁示例中需要引用计数? 2 年前 |
![]() |
JohnLBevan · 为什么原子语句上需要锁提示? 7 年前 |
![]() |
Jay Wang · 生产者/消费者实施:陷入消费者循环 7 年前 |
![]() |
Andremoniy · 悲观写入是否锁定整个表? 7 年前 |
![]() |
Marcus Cemes · 选择。。。用于更新在提交后选择旧数据 7 年前 |
![]() |
Ins0maniac · Rails,锁定数据库中的记录 7 年前 |