使用
ADD CONSTRAINT 子句指定新列或现有列或列组上的主键约束、外键约束、引用约束、唯一约束或检查约束。
例如,要将唯一约束添加至
customer 表的
fname 和
lname
列,请使用以下语句:
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 列。