事务范围中的sql死锁

时间:2013-04-25 17:24:02

标签: sql sql-server entity-framework tsql

我有交易范围,我想:

using (var scope = new TransactionScope())
{
   1) Insert row into table1
   2) Select rows from table1  (incuding inserted row in step 1)
   3) Insert another row into table1 
   4) Select rows from table1 (incuding inserted row in step 1 and 3)
}

有没有机会在这些操作中获得sql死锁?我是Db工作的实体框架。我不确定这一点。

谢谢,

度过愉快的一天。

2 个答案:

答案 0 :(得分:1)

这应该没有问题。

插入可能会锁定其他用户,甚至锁定您自己制作的其他事务,但它不会阻止您在相同 Sql事务中执行任何操作。

答案 1 :(得分:0)

是的,发生僵局是可能的。

如果SQL Server选择将INSERT操作所需的锁升级到页面或表级别,则会发生以下情况:

Transaction 1         Transaction 2
INSERT INTO page1
                      INSERT INTO page2
                      INSERT INTO page1
INSERT INTO page2

然后这两个事务将死锁,其中一个必须回滚。