创建和修改约束
可以使用 ALTER TABLE 语句将约束添加至现有表。
关于本任务
- 创建和修改唯一约束
- 可以将唯一约束添加至现有表。 约束名称不能与 ALTER TABLE
语句中指定的任何其他约束相同,而且在该表中必须是唯一的。 约束名称还必须有别于所有已定义的引用完整性约束名称。 在成功执行该语句之前,会对照新条件检查现有数据。要使用命令行来定义唯一约束,可使用 ALTER TABLE 语句的 ADD CONSTRAINT 选项。 例如,以下语句将一个唯一约束添加至 EMPLOYEE 表,它表示唯一标识该表中的职员的一个新方法:
要修改此约束,必须先删除此约束,然后重新创建。ALTER TABLE EMPLOYEE ADD CONSTRAINT NEWID UNIQUE(EMPNO,HIREDATE) - 创建和修改主键约束
- 可以将主键约束添加至现有表。 约束名称在表中必须是唯一的,而且必须有别于所有已定义的引用完整性约束的名称。 在成功执行该语句之前,会对照新条件检查现有数据。要使用命令行添加主键,请输入:
不能修改现有约束。 要将另一列或另一组列定义为主键,必须先删除现有主键定义,然后重新创建。ALTER TABLE <name> ADD CONSTRAINT <column_name> PRIMARY KEY <column_name> - 创建和修改检查约束
- 当添加表检查约束时,插入或更新该表的程序包和高速缓存的动态 SQL 可能被标记为无效。要使用命令行添加表检查约束,请输入:
要修改此约束,必须先将其删除,然后重新创建。ALTER TABLE EMPLOYEE ADD CONSTRAINT REVENUE CHECK (SALARY + COMM > 25000) - 创建和修改外键(引用)约束
- 外键是对另一个表中的数据值的引用。 存在各种类型的外键约束。当将一个外键添加至表时,包含下列语句的程序包和高速缓存的动态 SQL 可能被标记为无效:
- 要对包含外键的表执行插入或更新的语句。
- 更新或删除父表的语句。
要使用命令行添加外键,请输入:ALTER TABLE <name> ADD CONSTRAINT <column_name> FOREIGN KEY <column_name> ON DELETE <action_type> ON UPDATE <action_type>以下示例显示 ALTER TABLE 语句如何将主键和外键添加至一个表:
要修改此约束,必须先将其删除,然后重新创建。ALTER TABLE PROJECT ADD CONSTRAINT PROJECT_KEY PRIMARY KEY (PROJNO) ALTER TABLE EMP_ACT ADD CONSTRAINT ACTIVITY_KEY PRIMARY KEY (EMPNO, PROJNO, ACTNO) ADD CONSTRAINT ACT_EMP_REF FOREIGN KEY (EMPNO) REFERENCES EMPLOYEE ON DELETE RESTRICT ADD CONSTRAINT ACT_PROJ_REF FOREIGN KEY (PROJNO) REFERENCES PROJECT ON DELETE CASCADE - 创建和修改参考约束
- 为了提高查询性能,可以向表添加参考约束。 在 DDL 中指定
NOT ENFORCED 选项时,可以使用 CREATE TABLE 或 ALTER TABLE
语句添加参考约束。 与 NOT ENFORCED 选项一起,可进一步将约束指定为
TRUSTED 或 NOT TRUSTED。限制: 在对表定义参考约束之后,在除去参考约束之后,只能更改该表的列名。要使用命令行对表指定参考约束,请对新表输入下列其中一个命令:
ALTER TABLE <name> <constraint attributes> NOT ENFORCEDALTER TABLE <name> <constraint attributes> NOT ENFORCED TRUSTEDALTER TABLE <name> <constraint attributes> NOT ENFORCED NOT TRUSTEDENFORCED 或 NOT ENFORCED:指定数据库管理器在正常操作(如插入、更新或删除)期间是否强制执行约束。- 不能对函数依赖性指定 ENFORCED(SQLSTATE 42621)。
- 仅当绝对确定表数据符合该约束时,才应指定 NOT ENFORCED。 数据不符合该约束时,查询结果可能不可预测。 另外,还可指定 NOT ENFORCED 约束是 TRUSTED 还是 NOT TRUSTED。
- TRUSTED:通知数据库管理器可信任数据符合该约束。 此选项是缺省值。 仅当绝对确定数据符合该约束时,才能使用此选项。
- NOT TRUSTED:通知数据库管理器不信任该数据符合该约束。 此选项适用于数据的大部分行符合该约束但未绝对知道符合该约束的情况。 只能对外键指定 NOT TRUSTED (SQLSTATE 42601)。
要修改此约束,必须先将其删除,然后重新创建。