DB2 V9.7 for Linux, UNIX, and Windows

创建和修改约束

可以使用 ALTER TABLE 语句将约束添加至现有表。

关于此任务

约束名不能与在 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 语句添加参考约束。
限制: 对表定义参考约束后,只有先除去参考约束才能更改该表的列名。
要使用命令行对表指定参考约束,请对一个新表输入以下命令:
   ALTER TABLE <name> <constraint attributes> NOT ENFORCED
ENFORCED 或 NOT ENFORCED:指定数据库管理器在正常操作(如插入、更新或删除)期间是否强制执行约束。
  • 不能对函数依赖性指定 ENFORCED(SQLSTATE 42621)。
  • 仅当已知表数据以独立的方式符合约束时,才应指定 NOT ENFORCED。如果数据实际上不符合该约束,那么查询结果可能是不可预测的。

要修改此约束,必须先删除此约束,然后重新创建。