删除约束

可以使用 ALTER TABLE 语句显式删除表检查约束,或作为 DROP TABLE 语句的结果将其隐式删除。

关于本任务

要删除约束,使用带有 DROP 或 DROP CONSTRAINT 子句的 ALTER TABLE 语句。 这允许您 BIND 并继续访问包含受影响列的表。 一个表上的所有唯一约束的名称可以在 SYSCAT.INDEXES 系统目录视图中找到。

过程

  • 要显式删除唯一约束,请使用 ALTER TABLE 语句的 DROP UNIQUE 子句。
    ALTER TABLE 语句的 DROP UNIQUE 子句删除唯一约束 constraint-name 以及依赖于此唯一约束的所有引用约束的定义。 constraint-name 必须标识现有唯一约束。
        ALTER TABLE table-name
          DROP UNIQUE constraint-name
    删除此唯一约束使使用该约束的任何程序包或高速缓存的动态 SQL 无效。
  • 要删除主键约束,请使用 ALTER TABLE 语句的 DROP PRIMARY KEY 子句。
    ALTER TABLE 语句的 DROP PRIMARY KEY 子句删除主键以及依赖于此主键的所有引用约束的定义。 表必须具有主键。 要使用命令行来删除主键,请输入:
        ALTER TABLE table-name
          DROP PRIMARY KEY 
  • 要删除(表)检查约束,请使用 ALTER TABLE 语句的 DROP CHECK 子句。

    删除检查约束时,与该表有 INSERT 或 UPDATE 关系的所有程序包和高速缓存的动态语句将变得无效。 一个表上的所有检查约束的名称可以在 SYSCAT.INDEXES 目录视图中找到。 在尝试删除带有系统生成的名称的表检查约束之前,在 SYSCAT.CHECKS 目录视图中查找该名称。

    以下语句将删除检查约束 constraint-nameconstraint-name 必须标识对表定义的现有检查约束。 要使用命令行来删除表检查约束:
        ALTER TABLE table_name
          DROP CHECK check_constraint_name
    或者,可以使用带有 DROP CONSTRAINT 选项的 ALTER TABLE 语句。
  • 要删除外键(引用)约束,请使用 ALTER TABLE 语句的 DROP CONSTRAINT 子句。
    ALTER TABLE 语句的 DROP CONSTRAINT 子句删除约束 constraint-nameconstraint-name 必须标识对表定义的现有外键约束、主键或唯一约束。 要使用命令行来删除外键,请输入:
        ALTER TABLE table-name
          DROP FOREIGN KEY foreign_key_name 
    当删除外键约束时,包含下列语句的程序包或高速缓存的动态语句可能被标记为无效:
    • 插入或更新包含外键的表的语句
    • 更新或删除父表的语句。

示例

下列示例在 ALTER TABLE 语句中使用 DROP PRIMARY KEY 和 DROP FOREIGN KEY 子句来删除表上的主键和外键:
    ALTER TABLE EMP_ACT      
      DROP PRIMARY KEY      
      DROP FOREIGN KEY ACT_EMP_REF      
      DROP FOREIGN KEY ACT_PROJ_REF    
    ALTER TABLE PROJECT      
      DROP PRIMARY KEY