oracle数据库中表格的级联删除问题

2025年03月18日 16:48
有3个网友回答
网友(1):

两种方法,个人建议你选择方法一,简单方便

方法一:触发器解决(下面的代码可以不用修改,copy直接用)
create or replace trigger delete_dept
before delete on DEPT
for each row
begin
delete from EMP where DEPT_NO = :old.DEPT_NO;
delete from POS where DEPT_NO = :old.DEPT_NO;
end;
/

方法二:修改你的外键设置,达到级联删除的目的,具体实现如下:
a)先查询出EMP表和POS表中 外键的名称(如果你知道 外键名这一步可以省略)
select CONSTRAINT_NAME,TABLE_NAME from user_constraints where CONSTRAINT_TYPE ='R' and TABLE_NAME in('EMP','POS');

b)删除EMP表和POS表上的外键后 重新建立允许级联删除的外键模式
alter table EMP drop constraint 外键名;
alter table POS drop constraint 外键名;
alter table EMP add constraint 外键名 foreign key(DEPT_NO) references DEPT(DEPT_NO) on delete cascade;
alter table POS add constraint 外键名 foreign key(DEPT_NO) references DEPT(DEPT_NO) on delete cascade;

---
以上,希望对你有所帮助。

网友(2):

alter table d add constraint pk_d_deptno primary key (deptno);
alter table e add constraint fk_e_deptno foreign key (deptno);
references d (deptno) on delete cascade;

这样设置之后d表的数据删除时,就会级联删除e表了!

网友(3):

alter table DEPT add constraint PK_DEPT primary key (DEPT_NO);

alter table EMP add constraint FK_EMP foreign key (DEPT_NO) references DEPT(DEPT_NO) on delete cascade;

alter table POS add constraint FK_POS foreign key (DEPT_NO) references DEPT(DEPT_NO) on delete cascade;

以上,希望对你有所帮助!