【发布时间】:2019-05-15 18:55:24
【问题描述】:
我遇到了外键问题。我创建了一组触发器,如果表中的一行被删除,则应该通过数据库级联删除,以便删除其所有子项(以及这些子项的子项)。这是此类触发器的示例。
create or replace trigger trigg_delet_child before delete on PARENT for
each row
begin
delete from CHILD where foreign_key_parent_id = :old.id_parent;
end;
我在每张桌子上都有一组这样的触发器。我假设由于触发器应该在 执行删除语句之前触发,因此将火炬传递到较低和较低的表,直到我们最终点击没有子项的项目并从那里开始删除并向上工作.
情况似乎并非如此,因为违反了 foreign_key 约束是可以理解的,因为显然我误解了 BEFORE 的工作原理。有没有办法在不指定foreign_key 约束应在删除时级联的情况下回避这个问题?
【问题讨论】:
-
使用
on delete cascade定义的外键有什么问题? -
1) 它不适用于具有来自图腾柱较高的两个表的外键的表。或者至少,有人告诉我。 2)这项工作是课堂练习。优先事项是练习触发器、程序和功能。我可以通过创建删除过程并以正确的顺序调用它们来轻松解决这个问题,但我想尝试一下触发器。
-
当然你需要对“图腾柱”中的所有外键都这样做
-
那么让我们假设“on delete cascade”约束不存在。我猜我需要使用过程/函数是否正确,或者是否有某种方法可以实际触发上述触发器?
-
改成
after delete不行吗?
标签: oracle plsql triggers foreign-keys sql-delete