SQL Server更新锁

时间:2014-09-29 17:08:22

标签: sql sql-server locking sql-update read-uncommitted

如果您有以下sql,是否可能由于许多不同的进程在同一时间多次运行,那么两个或更多进程可能会更新该表?

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE table
SET Column1 = 1
WHERE Column1 = 0

在sql中没有指定其他锁等,其他的是Read Uncommitted。

我试图追查一个问题,而我现在抓着稻草......

1 个答案:

答案 0 :(得分:0)

从MSDN获得此信息。

在READ UNCOMMITTED级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。 READ UNCOMMITTED事务也不会被独占锁阻止,这会阻止当前事务读取已被修改但未被其他事务提交的行。设置此选项后,可以读取未提交的修改,这些修改称为脏读。可以更改数据中的值,并且在事务结束之前,行可以在数据集中显示或消失。此选项与在事务中所有SELECT语句中的所有表上设置NOLOCK具有相同的效果。这是隔离级别中限制最少的。

所以基本上,这相当于SQL Server,NOLOCK提示。这可能导致脏读,即如果某个进程在更新的1000条记录中并且到目前为止更新500,而其他进程读取该数据,那么数据可能是不一致的形式。这也有助于执行更新而不会被多个选择查询阻止(共享锁定)。

希望这对你的问题有所帮助。供参考 - MSDN