事务作用域中的sql死锁

事务作用域中的sql死锁,sql,sql-server,entity-framework,tsql,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

我有交易范围,我想:

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死锁?我正在使用实体框架进行数据库工作。我对此不确定

谢谢,


祝你度过愉快的一天。

是的,可能会出现一个僵局

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

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

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

这应该没有问题


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

您的意思是“此例程是否可能自行生成Sql死锁”,即没有任何其他人访问数据库?或者您的意思是“如果两个(或多个)用户同时运行此例程,sql死锁可能发生”?一个平均死锁本身。在我看来,有一个事务是由事务范围定义的。EF框架还在插入过程中创建了事务。但我认为这些“小”事务将立即提交(并且表将被解锁)。那么,在什么时候会有两个交易呢?谢谢。@snoi这里只有一笔交易。他的所有查询都在同一事务范围内同时运行。谢谢。所以,在同一个sql事务中没有办法获得死锁?