Sql Oracle数据库多表删除问题

Sql Oracle数据库多表删除问题,sql,database,oracle,cascading-deletes,Sql,Database,Oracle,Cascading Deletes,我有两个表,其中t1的id在t2中被引用为t1_fk。当我想从t1中删除行时,我得到的错误是我在t2中有子引用。我想在一天内完成 我找到了oracle SQL解决方案: DELETE t1, t2 FROM t1 INNER JOIN t2 ON t1.id = t2.t1_fk; 但这在node-oracle_db和sqldeveloper中都不适用。它抛出“SQL命令未正确完成” 有人能帮忙吗 更新(已解决): 由于以下评论,我能够修复以下两个限制: ALTER TABLE t2 drop

我有两个表,其中t1的id在t2中被引用为t1_fk。当我想从t1中删除行时,我得到的错误是我在t2中有子引用。我想在一天内完成

我找到了oracle SQL解决方案:

DELETE t1, t2 FROM t1 INNER JOIN t2 ON t1.id = t2.t1_fk;
但这在node-oracle_db和sqldeveloper中都不适用。它抛出“SQL命令未正确完成”

有人能帮忙吗

更新(已解决): 由于以下评论,我能够修复以下两个限制:

ALTER TABLE t2
drop CONSTRAINT c_t1_fk;

ALTER TABLE t2
  ADD CONSTRAINT c_t1_fk 
  FOREIGN KEY (t1_fk) 
  REFERENCES FILTER_PROFIL(id) 
  ON DELETE CASCADE;

ALTER TABLE t3
drop CONSTRAINT c_t1_fk;

ALTER TABLE t3 
  ADD CONSTRAINT c_t1_fk 
  FOREIGN KEY (t1_fk) 
  REFERENCES FILTER_PROFIL(id) 
  ON DELETE CASCADE;
更改约束后,我只做了以下操作:

DELETE FROM t1 WHERE id=:id
现在一切都好了

非常感谢。

你不可能一次完成;Oracle一次删除一个表。因此:

  • 首先删除子项(由于外键约束)
  • 下一步删除母版
如果在DELETE CASCADE中将外键约束声明为
,则是-您可以通过

  • 删除母版

因为级联会照顾孩子。

这是您的示例设置

create table t1
(id number primary key);

create table t2
(id number primary key,
 t1_id number);
 
alter table t2 add constraint "FK" foreign key (t1_id) references t1 (id); 

insert into t1 (id) values(1);
insert into t1 (id) values(2);

insert into t2 (id,t1_id) values (1,1); 
insert into t2 (id,t1_id) values (2,1); 
insert into t2 (id,t1_id) values (3,1); 

insert into t2 (id,t1_id) values (4,2);
现在要从
T1
中删除id为
1和2的行

delete from t1
where id in (1,2);
但是你失败了,错误是

ORA-02292:违反完整性约束(xxx.FK)-找到子记录

您需要将delete cascade上的约束更改为
,这将在删除父行后删除子行

alter table t2 drop constraint "FK";
alter table t2 add constraint "FK" foreign key (t1_id) references t1 (id) on delete cascade;
并再次删除

delete from t1
where id in (1,2);
你得到

 2 rows deleted.

。。。表
T2
实际上也是空的

。SQL开发人员现在可以使用on delete cascade了。但是,当我使用节点oracledb调用该查询时,它仍然在呼喊:DELETE FROM FILTER_PROFIL,其中id=:id:ORA-02292:integrity constraint可能还有其他未设置为删除的FK constant。由于Oracle报告FK名称被违反,这是您进一步调查的起点。