【问题标题】:How to drop Parent table without deleting or dropping constraints on child table in Oracle如何在不删除或删除 Oracle 中子表的约束的情况下删除父表
【发布时间】:2014-02-13 10:17:39
【问题描述】:

我有两张桌子,一张是父母和孩子。父表有主约束,子表有外键约束。现在我想删除父表而不删除或删除子表上的约束。

我尝试禁用父表和子表的约束并尝试删除父表。但我仍然无法删除 Parent 表。

如果删除父表上的主约束,那么它也会删除子表上的外键约束。

如果有人可以帮助我,请。

谢谢。

【问题讨论】:

  • 我想不出你为什么要删除与其有外键关系的父级的原因。

标签: oracle


【解决方案1】:

如果您有一个带有外键约束的子表,则不能删除父表,除非您指定 CASCADE CONSTRAINTS 子句:

DROP TABLE P CASCADE CONSTRAINTS;

此命令也删除 FK 约束。

【讨论】:

    【解决方案2】:

    删除表必然会删除与该表相关的所有约束。如果该表引用了某个表,则必须先删除这些约束以避免违反规则。

    *oracle 文档说:* http://docs.oracle.com/cd/B28359_01/server.111/b28310/tables010.htm#ADMIN01505

    以下语句删除 t 表:

    DROP TABLE t;
    

    如果要删除的表包含其他表的外键引用的任何主键或唯一键,并且您打算删除子表的 FOREIGN KEY 约束,则在 DROP TABLE 语句中包含 CASCADE 子句,如下图:

    DROP TABLE t CASCADE CONSTRAINTS;
    

    【讨论】:

      【解决方案3】:

      奇怪...如果您正确禁用了约束,您应该能够删除父表而不会出现任何错误。

      :|

      【讨论】:

      • 对于删除表,即使您已经禁用了约束,您仍然会收到错误
      • 没有。如果禁用 costraint,您可以删除表,这就是约束,以保护关系。
      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 2021-02-04
      • 2011-07-14
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 2021-04-04
      相关资源
      最近更新 更多