【问题标题】:SQL Server Update LocksSQL Server 更新锁
【发布时间】:2014-09-29 17:08:21
【问题描述】:

如果你有下面的sql,如果它被许多不同的进程同时运行多次,是否有可能有两个或多个进程更新表?

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

sql中没有指定其他锁等,除了Read Uncommitted。

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

【问题讨论】:

  • 您有没有机会阅读我的回复,或者如果您发现任何更有趣的答案,请更新:)。

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


【解决方案1】:

从 MSDN 获得。

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

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

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

【讨论】:

    猜你喜欢
    • 2019-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多