【发布时间】:2012-08-14 21:44:13
【问题描述】:
我注意到 MS SQL 可能会在前一个事务完成(或提交)之前开始另一个事务。有什么方法可以确保交易必须在下一个交易开始之前先完成?
我的问题是我想在 SQL INSERT 之后几乎立即执行 SQL SELECT。我现在看到的是;当 SELECT 语句运行时;它不会返回(非常)最近插入的数据。
当我使用 SQL 分析器跟踪此场景时,我注意到 SQL INSERT 和 SELECT 同时执行,因为 SELECT 发生在 INSERT 完成之前。
有没有办法解决我的这个问题?谢谢!
【问题讨论】:
-
事务不会阻止同时运行。你需要为此使用锁。
-
@user1034912:
it does not return the (very) recently inserted data.。它也不返回半更新的数据(旧的新的)。您在插入之前获取数据,从一致性的角度来看这是有效的。如果您想要确保你在更新后得到数据,你需要像 Marc B 所说的那样使用锁 -
谢谢大家。 Marc B,我在寻找什么命令来获得锁?
-
是否允许在 select 发生时插入行?如果没有,我认为您可能必须锁定整个表...从并发性能问题来看,这真的很糟糕。你想要完成什么,你需要这种锁定?
标签: sql sql-server select transactions transaction-isolation