DROP CONSTRAINT 子句

使用 DROP CONSTRAINT 子句删除指定的约束。
ALTER TABLE 语句的 DROP CONSTRAINT 子句具有此语法:
DROP CONSTRAINT 子句
用法
要删除现有约束,请指定 DROP CONSTRAINT 关键字和此约束的名称。要删除同一表上的多个约束,则约束名称列表必须逗号分隔并由括号分隔。
您要删除的约束可具有 ENABLED 、DISABLED 或 FILTERING 方式。
这里是一个删除约束的示例:
ALTER TABLE manufact DROP CONSTRAINT con_name;
以下示例删除了定义在 orders 表中的引用约束和检查约束:
ALTER TABLE orders DROP CONSTRAINT (con_ref, con_check);
GBase 8s 的 SQL 执行包含非 DROP CONSTRAINT 语句。然而,如果该语句存在,则 ALTER
TABLE 语句的此子句提供一个 DROP CONSTRAINT 语句除外的功能。
当 DROP TABLE 语句删除该表时,会默示地删除该指定表上所有的约束。
获取约束名称
DROP CONSTRAINT 子句需要约束的名称。如果创建约束时没有声明名称,则数据库服务器生成
新的约束的名称。您可以查询 sysconstraints 系统目录表以获得约束的名称的所有者。例如,要查
找位于 items 表上约束的名称,您可以发出以下语句:
SELECT constrname FROM sysconstraints
WHERE tabid = (SELECT tabid FROM systables
WHERE tabname = ‘items’);
约束之间的依赖
当您删除拥有对应外键的主键约束或唯一约束时,任何相关联的引用约束也会被删除。
例如,在 stores_demo 数据库中,orders 表的 order_num 列上具有主键约束。对应的外键约束
也定义在 items 表中的 order_num 列。这些约束定义在这两个表中的 order_num 列定义了引用
关系。
假设您运行 ALTER TABLE orders DROP CONSTRAINT 语句删除 orders 表 order_num 列上的主键约束。因为在这两个表之间的参照完整性关系不能没有主键约束,如果此示例中的 ALTER TABLE 语句成功,则数据库服务器将会采取这些操作:
⚫ 删除 orders 表 order_num 列上指定的主键约束。
⚫ 删除 items 表 order_num 列上对应的引用约束。
⚫ 从系统目录中删除所有引用 orders 表的主键或 items 表上引用约束。
删除约束对系统目录的影响
数据库服务器维护这些系统目录表中的现有约束的信息:
⚫ sysconstraints(所有的约束)
⚫ sysobjstate(所有的约束)
⚫ syschecks (检查约束)
⚫ syscoldepend(检查约束和 NOT NULL 约束)
⚫ syscheckudrdep(UDR 引用的检查约束)
⚫ sysreferences(引用约束)
⚫ sysindices( 在 sysindices 中没有对应所有项的引用、主键或唯一约束)
当 DROP CONSTRAINT 子句成功删除约束之后,数据库服务器至少删除或更新以上一个或多个表的一行。
数据类型的注意事项
缺省情况下,每一 IDSSECURITYLABEL 列拥有一个隐式的 NOT NULL 约束,但是 DROP
CONSTRAINT 子句不能引用 IDSSECURITYLABEL 类型的列。
您可以在 ROW 数据类型的已分类表的 ALTER TABLE 操作中包含 DROP CONSTRAINT 子句。
还原引用约束
对于某些操作,例如将表重新定位到另一个数据库中,您可能要求引用约束暂时不会对它的表产生
影响。然而,当您不带此约束而完成操作后,数据库的参照完整性通常要求还原此约束的功能。可
能的选项是:
⚫ 使用 DROP CONSTRAINT 子句删除此约束。
⚫ 完成此任务需要避免该约束的影响。
⚫ 使用 ALTER TABLE ADD CONSTRAINT 重建此约束。
对于符合已删除外键约束的大表,在 ALTER TABLE ADD CONSTRAINT 已经中使用
NOVALIDATE 选项可以避免创建约束时使用全表扫描验证约束的显著成本。此 NOVALIDATE
选项要求使 Multi-Column Constraint Format 语法定义此约束。
类似地,比起删除大表上的引用约束,您可以禁用它,然后完成任务,使用禁用的约束需要较少的
资源。要恢复约束的强制性,您可以使用 SET Database Object Mode 语句的 SET CONSTRAINTS
选项将此对象的方式重置为 ENABLED NOVALIDATE 或 FILTERING WITH ERROR
NOVALIDATE 或 FILTERING WITHOUT ERROR NOVALIDATE。在以上每一种约束方式中,
NOVALIDATE 关键字避免了重置方式时验证约束的开销。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值