单列约束格式

使用单列约束格式将一个或多个约束与单列关联。

单列约束格式

如果表包含数据,则您不能在新列上指定主键或唯一约束。然而在唯一约束的情况下,表可以包含行的数据。如果希望添加带有主键约束的列,则发出 ALTER TABLE 语句时表必须为空。

当在现有列上放置主键或者唯一约束时,应用以下规则:
  • 当您在一列或一组列上放置主键或唯一约束时,数据库服务器在受约束的列或一组列上创建内部 B-tree 索引,并且自动计算列统计信息,相当于 UPDATE STATISTICS 语句在 HIGH 模式下创建分布。除非在该列或该组列上定义了用户创建的索引。
  • 如果在一列或一组列上放置主键或唯一约束,而且该列或该组列上已存在唯一索引,则约束共享该索引。然而如果现有索引允许复制,则数据库服务器返回错误。那么您必须在添加约束之前删除现有索引。
  • 如果在一列或一组列上放置主键或唯一约束,并且该列或该组列上已存在引用约束,则重复索引升级为 UNIQUE (如果可能的话),并且该索引被共享。

不能在 BYTE 或 TEXT 列上放置唯一约束,也不能在这些数据类型的列上放置引用约束。 BYTE 或 TEXT 列上的检查约束可只能用于检查 IS NULL 、IS NOT NULL 或 LENGTH。

如果在同一列上指定 NOT NULL 约束和 NULL 约束,则该语句失败。不能在数据类型是 LIST 、MULTISET 、SET 或 IDSSECURITYLABEL 的列上定义 NULL 约束。

IDSSECURITYLABEL 列具有隐式 NOT NULL 约束,但是它不能具有显式单列约束也不能是多列引用约束或检查约束的一部分。如果约束在存储加密数据的列上,那么 GBase 8s 不能强制执行此约束。

重要:

不能使用单列约束格式在 ENABLED NOVALIDATE 或 FILTERING WITH ERROR NOVALIDATE 或 FILTERING WITHOUT ERROR NOVALIDATE 约束模式中添加外键约束的新列。对于 ALTER TABLE 语句在 ALTER TABLE 操作期间使用 NOVALIDATE 关键字绕过违规检查来创建新的外键约束,必须使用具有多列约束格式的 ALTER TABLE ADD CONSTRAINT 语法。

1 GBase 8s 扩展
2 请参阅约束定义
3 请参阅 REFERENCES 子句
4 请参阅 CHECK 子句