【问题标题】:How to drop more than one constraint at once (Oracle, SQL)如何一次删除多个约束(Oracle、SQL)
【发布时间】:2011-08-17 01:50:48
【问题描述】:

我正在更改我的数据库中的约束,我需要删除其中的一些。我知道对于单个约束,命令如下:

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name;

但是,当我尝试时

ALTER TABLE tblApplication DROP (
  CONSTRAINT constraint1_name,
  CONSTRAINT constraint2_name,
  CONSTRAINT constraint3_name
);

它不起作用,我需要这样做:

ALTER TABLE tblApplication DROP CONSTRAINT constraint1_name;
ALTER TABLE tblApplication DROP CONSTRAINT constraint2_name;
ALTER TABLE tblApplication DROP CONSTRAINT constraint3_name;

有没有办法在单个命令中删除多个约束?我想避免重复ALTER TABLE tblApplication,就像使用ADD 命令一样:

ALTER TABLE tblApplication ADD (
  CONSTRAINT contraint1_name FOREIGN KEY ... ENABLE,
  CONSTRAINT contraint2_name FOREIGN KEY ... ENABLE,
  CONSTRAINT contraint3_name FOREIGN KEY ... ENABLE
);

【问题讨论】:

  • 在您的添加示例中,您使用了大括号而不是括号。

标签: sql database oracle constraints


【解决方案1】:

是的,我们可以一次删除多个:

ALTER TABLE TABLE NAME
DROP CONSTRAINTS CONSTRAINT VALUE
DROP CONSTRAINTS CONSTRAINT VALUE;

【讨论】:

  • 欢迎来到 Stack Overflow。请接tour,阅读How to Answer,不要大喊大叫。
【解决方案2】:

还有一种替代形式可以删除与表中的列相关的约束,同时使用 CASCADE 删除列:

ALTER TABLE table1 DROP (columnName) CASCADE CONSTRAINTS;

在 Oracle 11g 上测试

【讨论】:

    【解决方案3】:

    是的,你可以。您只需要对每个约束重复“删除约束”。例如

    alter table t1
    drop constraint fk1
    drop constraint fk2
    /
    

    编辑:我在 Oracle 11 上对此进行了测试,它运行良好。不知道旧版本。

    【讨论】:

    • 公平地说,关于 ALTER TABLE 的 Oracle 文档是相当难读的。我花了一段时间才找到一个声明允许多个 drop 子句的句子。语法图一点也不明显,可以证明它不允许这样做。
    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多