0

我一直在阅读有关事务隔离级别和表提示的 MSDN,以了解在 SQL Server 中执行 2 步插入时我需要做什么才能以独占方式锁定表。我想出了两种方法来做到这一点,并想知道这些方法之间有什么区别。

这个答案显示了如何使用提示(https://stackoverflow.com/a/23759307/545430):

--Enclose steps in transaction to define an atomic operation
BEGIN TRAN
    -- Perform an insert that locks tblMoo
    INSERT INTO tblMoo SET fldCow='valPie' WITH (TABLOCKX, SERIALIZABLE)
    UPDATE tblMoo SET fldCowIndex=(SELECT MAX(fldCowIndex) + 1)
COMMIT TRAN

我想我也可以通过设置隔离级别来实现我的目标:

BEGIN TRAN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
    INSERT blah blah blah
    UPDATE hoo dee dah
COMMIT TRAN

当我的事务插入这个新行时,我锁定整个表以防止任何更新是很重要的。这两种方法会产生相同的结果:表被 INSERT 和 UPDATE 命令锁定吗?

4

0 回答 0