可以在创建表时创建单个 PRIMARY KEY 约束作为表定义的一部分。如果表已存在,且没有 PRIMARY KEY 约束,则可以添加 PRIMARY KEY 约束。一个表只能有一个 PRIMARY KEY 约束。
如果已存在 PRIMARY KEY 约束,则可以修改或删除它。例如,可以让表的 PRIMARY KEY 约束引用其他列,更改列的顺序、索引名、聚集选项或 PRIMARY KEY 约束的填充因子。但是,不能更改使用 PRIMARY KEY 约束定义的列长度。
注意 |
---|
若要修改 PRIMARY KEY 约束,必须先删除现有的 PRIMARY KEY 约束,然后再用新定义重新创建该约束。 |
为表中的现有列添加 PRIMARY KEY 约束时,数据库引擎将检查现有列的数据和元数据以确保主键符合以下规则:
列不允许有空值。
创建表时指定的 PRIMARY KEY 约束列隐式转换为 NOT NULL。由于稀疏列必须允许空值,因此稀疏列不能用作主键的一部分。
不能有重复的值。
如果为具有重复值或允许有空值的列添加 PRIMARY KEY 约束,则数据库引擎将返回一个错误并且不添加约束。
不能添加违反以上规则的 PRIMARY KEY 约束。
数据库引擎会自动创建唯一的索引来强制实施 PRIMARY KEY 约束的唯一性要求。如果表中不存在聚集索引或未显式指定非聚集索引,则将创建唯一的聚集索引以强制实施 PRIMARY KEY 约束。
如果存在以下情况,则不能删除 PRIMARY KEY 约束:
如果另一个表中的 FOREIGN KEY 约束引用了 PRIMARY KEY 约束,则必须先删除 FOREIGN KEY 约束。
表包含应用于自身的 PRIMARY XML 索引。