我想在大约1200万条记录的表上运行以下命令。
ALTER TABLE t1 ADD c1 int NULL; ALTER TABLE t2 ADD c2 bit NOT NULL DEFAULT(0);
我已经在暂存阶段完成了该操作,并且时间安排似乎还不错,但是在生产之前,我想知道在创建新列时锁定表如何工作(特别是在指定默认值的情况下)。那么,有人知道吗?整个表是否被锁定,或者在默认值插入过程中行被一一锁定?还是发生了完全不同的事情?
是的,它将锁定表格。
整个表具有单个架构(列集以及关联的类型)。因此, 至少 需要一个模式锁来更新表的定义。
尝试考虑事情将如何相反地工作-如果每一行分别进行更新,那么任何并行查询将如何工作(特别是如果它们涉及新列)?
并且默认值仅在INSERTDDL和DDL语句期间有用-因此,如果为10,000,000行指定了新的默认值,则必须将该默认值应用于所有这些行。
INSERT