oracle 删除关联表数据

oracle 删除关联表数据,第1张

设定dept表deptno列为主键。

alter table dept add constraint pk_deptno primary key (deptno)

在emp表deptno列上建立外键引用dept表deptno,指定外键类型为级联删除。

alter table emp add constraint fk_deptno foreign key (deptno) references dept(deptno) on delete cascade

这样删除dept表 只需:delete from dept where city='shanghai'就可以自动删除对应emp表内容。

删除数据库的表,关键点不在删除的 *** 作,而是在授权 *** 作删除。

为什么要删除?谁让删除的?这些都要形成文字的相关内容,不然在生产系统中,如果你是最后 *** 作的,那么板子只能打到你身上。

至于删除的语句很简单,最好用表所属于的用户登陆,然后drop table tablename就可以了。

这样删除有一个好处,就是表在该用户的回收站(10g版本以及以后)中,如果想恢复还有办法。但是如果加了purge这个参数,那么你想恢复都没有办法了。(除非有备份)

oracle回收站的恢复方式:flashback table tablename to before drop如果该用户没有flashback的权限,那么可以考虑以dba身份的用户登陆。

查看回收站的表,本用户登陆sqlplus连接,show recyclebin

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

方法一:触发器解决(下面的代码可以不用修改,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

---

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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/6777884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存