我将隔离级别定义为READ UNCOMMITTED
,因为这是一个在几个表上长时间运行的过程,并且没有脏读的风险,因为我只是插入新数据。
根据我的理解,因为我使用的是这种隔离级别,所以我应该能够从插入行的表中执行SELECT
语句,但我不能,它会被阻塞。
为什么这个隔离级别会阻塞SELECT
语句?
它应该允许查询这些表,并在最坏的情况下检索脏数据。
为了防止这有帮助,我正在使用CURSOR
(我知道,我也讨厌它们,但我没有写这段代码)处理真正大的数据和多个表。
执行插入操作时(无论隔离级别如何)都会发生锁。如果不进行一些锁定,就无法插入行。隔离级别会影响阅读。
如果您使用(nolock)从表a中选择*,您将读取未提交的行,但在很短的一段时间内(由于插入)将发生锁定。