ADD CONSTRAINT 子句

使用 ADD CONSTRAINT 子句指定新列或现有列或列组上的主键约束、外键约束、引用约束、唯一约束或检查约束。

例如,要将唯一约束添加至 customer 表的 fnamelname 列,请使用以下语句:
ALTER TABLE customer ADD CONSTRAINT UNIQUE (lname, fname); 
要声明约束的名称,请更改上述语句(给该约束添加 CONSTRAINT 关键字和标识符):
ALTER TABLE customer 
          ADD CONSTRAINT UNIQUE (lname, fname) CONSTRAINT u_cust; 
在同一表上定义的约束的标识符的名称必须唯一。如果没有定义此约束的名称,则数据库服务器会为其指定系统定义的标识符,并将此名称存储至系统目录表的 sysconstraints.constrid 列。
缺省情况下,新约束是启用的。要添加未启用的约束,您可以在该约束的名称之后包含 DISABLED 关键字:
ALTER TABLE customer 
          ADD CONSTRAINT UNIQUE (lname, fname) CONSTRAINT u_cust DISABLED; 
在您希望强制执行此约束 的 DML 操作之前,可以使用 SET Database Object Mode 语句启用该禁用的约束。

当您未指定新约束的名称时,则数据库服务器会提供一个名称。您可以在 sysconstraints 系统目录表中找到约束的名称。有关 sysconstraints 系统目录表的更多信息,请参阅 GBase 8s SQL 参考指南

由 ALTER TABLE 定义约束的限制

以下有关 ADD CONSTRAINT 子句(和 MODIFY 子句)的限制会影响 ALTER TABLE 语句定义的约束:
  • 当您添加约束时,它的排列顺序必须与创建表时顺序一致。
  • ADD CONSTRAINT 子句不能在任何数据类型的列上定义 NULL 或 NOT NULL 约束。只有 MODIFY 子句才能在现有表的列上定义 NULL 或 NOT NULL 约束。
  • 您不能在 RAW 表上定义主键约束、外键约束或唯一约束。然而您可以使用 ALTER TABLE 语句的 MODIFY 子句在 RAW 表上的列中定义 NOT NULL 约束或 NULL 约束(但是不能都定义)。有关在现有表的列上添加 NULL 或 NOT NULL 约束的语法,请参阅 MODIFY 子句
  • 您不能在 BYTE 或 TEXTY 列上放置唯一约束或引用约束。
  • BYTE 或 TEXTA 列的检查约束只检查 IS NULL 、IS NOT NULL 或 LENGTH 。
  • 缺省情况下,每个 IDSSECURITYLABEL 列具有隐式 NOT NULL 约束。然而您不能使用 ADD CONSTRAINT 子句引用在单列约束的定义中的 IDSSECURITYLABEL 列,也不能引用作为多列引用约束或检查约束的一部分的 IDSSECURITYLABEL 列。
1 对于 NULL 和 NOT NULL 约束,请使用 MODIFY 子句
2 请参阅 多列约束格式