我对SQL Server中的表锁定有疑问,同时使用多个进程将数据一次插入到同一个表中。
以下是我的问题,
请帮我理解一下。
答案 0 :(得分:9)
执行插入时,SQL服务器的默认行为是锁定表吗?
没有。 SQL Server默认锁定按行 - 因此插入的新行被锁定 - 但不是整个表。
如果在单个事务中插入超过5000行,则会发生这种情况。在这种情况下,保持许多单独的锁只会变得太多,SQL Server将执行锁定升级并改为锁定整个表。
答案 1 :(得分:5)
它取决于表的大小和聚簇索引上的设置(如果存在)。如果CI具有页锁并允许行锁,则这些是默认值。如果多个页面被锁定,您将看到锁定升级,可能最多是表锁定。
如果您想明确锁定表格,可以使用插页TABLOCK
INSERT INTO MyTABLE WITH (TABLOCK)...
提示
我不确定你的意思。