在sql中使用nolock

时间:2012-04-28 09:58:58

标签: sql

insert into table b select * from table a (nolock)  

我在哪里放nolock?以上是错误的列名'nolock'

我的要求是将表a中的数据插入到表b中,但我经常遇到死锁。

1 个答案:

答案 0 :(得分:2)

假设这是针对SQL Server ...

更现代的写作方式是

insert into b 
   select * 
   from a with (readuncomitted)

使用它有很多风险和后果。值得考虑的是,在使用readuncommitted时,表格a是否始终会提供一致的结果,NOLOCKS的更新版本。

即使这样,您仍然可以看到死锁,具体取决于当时这些表中发生的其他情况。通过读取未提交的数据并在读取时不保留表a上的锁定,可以消除死锁的一个潜在原因。

有关详细信息,请参阅此问题:

Is nolock (SQL Server) hint bad practice?