在SQL Server数据库中插入数据时锁定表

use*_*108 4 database sql-server locks

我对SQL Server中的表上的锁定有疑问,同时使用多个进程将数据一次插入到同一个表中.

以下是我对此的问题,

  1. 是否在执行插入时锁定表的SQL服务器的默认行为?
  2. 如果是Q1,那么我们如何在插入数据时隐式提及.
  3. 如果我有4个表,并且一个表具有来自3个表的其余部分的外键,在这种情况下我是否需要显式使用表锁,否则我可以将记录插入到这些表中?

请帮我理解一下.

mar*_*c_s 10

是否在执行插入时锁定表的SQL服务器的默认行为?

默认情况下,SQL Server按锁定- 因此插入的新行被锁定 - 但不是整个表.

如果在单个事务中插入超过5000行,则会发生这种情况.在这种情况下,保持许多单独的锁只会变得太多,SQL Server将执行锁升级并锁定整个表.


JNK*_*JNK 6

  1. 它取决于表的大小和聚簇索引上的设置(如果存在).如果CI具有页锁并允许行锁,那么这些是默认值.如果多个页面被锁定,您将看到锁定升级,可能最多是表锁定.

  2. 如果要显式锁定表,可以使用TABLOCK插入的提示(INSERT INTO MyTABLE WITH (TABLOCK)...

  3. 我不确定你的意思.