如果您有以下sql,是否有可能如果它被许多不同的进程同时运行多次,那么两个或多个进程可能会更新表?
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE table
SET Column1 = 1
WHERE Column1 = 0
sql中没有指定其他锁等,其他未提交读取。
我正试图追查一个问题,而我现在正抓着稻草......
如果您有以下sql,是否有可能如果它被许多不同的进程同时运行多次,那么两个或多个进程可能会更新表?
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
UPDATE table
SET Column1 = 1
WHERE Column1 = 0
sql中没有指定其他锁等,其他未提交读取。
我正试图追查一个问题,而我现在正抓着稻草......
从 MSDN 得到这个。
在 READ UNCOMMITTED 级别运行的事务不会发出共享锁,以防止其他事务修改当前事务读取的数据。READ UNCOMMITTED 事务也不会被排他锁阻塞,排他锁会阻止当前事务读取已修改但未由其他事务提交的行。设置此选项时,可以读取未提交的修改,称为脏读。可以更改数据中的值,并且可以在事务结束之前在数据集中出现或消失行。此选项与在事务中的所有 SELECT 语句中的所有表上设置 NOLOCK 具有相同的效果。这是隔离级别中限制最少的。
所以基本上,这相当于 SQL Server , NOLOCK 提示。这可能会导致脏读,即如果某个进程在更新了 1000 条记录并更新了 500 条记录,而其他进程读取了该数据,那么数据可能是不一致的形式。这也有助于执行更新而不会被多个选择查询阻塞(共享锁)。
希望这对您的问题有意义。供参考——MSDN