如何一次删除多个约束(Oracle、SQL)

xxe27gdn  于 2022-11-22  发布在  Oracle
关注(0)|答案(4)|浏览(233)

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

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
);
2q5ifsrm

2q5ifsrm1#

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

alter table t1
drop constraint fk1
drop constraint fk2
/

编辑:我在Oracle11上测试了这个,它运行得很好。不知道旧版本。

ovfsdjhp

ovfsdjhp2#

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

ALTER TABLE table1 DROP (columnName) CASCADE CONSTRAINTS;

它在Oracle 11g上进行了测试

6mw9ycah

6mw9ycah3#

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

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

u2nhd7ah4#

例如:我们可以通过创建变量的约束来删除MySQL中的约束。

create table sample(id int, name varchar(30), marks int, constraint uid unique(id), constraint un unique(name));
alter table sample drop constraint uid, drop constraint un;

相关问题