小编典典

在SQL Server 2008中添加列是否会锁定表?

sql

我想在大约1200万条记录的表上运行以下命令。

ALTER TABLE t1
ADD c1 int NULL;
ALTER TABLE t2
ADD c2 bit NOT NULL
DEFAULT(0);

我已经在暂存阶段完成了该操作,并且时间安排似乎还不错,但是在生产之前,我想知道在创建新列时锁定表如何工作(特别是在指定默认值的情况下)。那么,有人知道吗?整个表是否被锁定,或者在默认值插入过程中行被一一锁定?还是发生了完全不同的事情?


阅读 186

收藏
2021-04-28

共1个答案

小编典典

是的,它将锁定表格。

整个表具有单个架构(列集以及关联的类型)。因此, 至少 需要一个模式锁来更新表的定义。


尝试考虑事情将如何相反地工作-如果每一行分别进行更新,那么任何并行查询将如何工作(特别是如果它们涉及新列)?


并且默认值仅在INSERTDDL和DDL语句期间有用-因此,如果为10,000,000行指定了新的默认值,则必须将该默认值应用于所有这些行。

2021-04-28