删除前的Firebird触发器

时间:2013-12-17 17:56:51

标签: sql triggers firebird firebird2.5

我有两个表AUTHORBOOKAUTHORID连接。

我需要创建一个触发器,在删除作者的情况下,它首先删除该作者的书籍,然后删除作者。如果有人只是尝试更新AUTHORID中的AUTHOR字段,则会自动更新AUTHORID中的BOOK。这是否可行? :)

set term # ;  
create trigger del for author  
before delete or update as  
  declare variable aut int;  
  declare variable bok int;  
begin  
  if(deleting) then  
  begin  
    delete from book where authorid=:aut;  
    delete from author where authorid=:aut;  
  end  
  if (updating) then  
  begin  
    update book set authorid=new.authorid;  
  end end#  
set term ; # 

1 个答案:

答案 0 :(得分:5)

您不需要触发器来执行此操作。要删除,您可以使用ON DELETE CASCADE的外键。如果删除了外键目标,这将自动将删除级联到依赖行。

一般情况下,我建议不要让人们更改标识符,但如果您真的需要或想要,可以使用ON UPDATE CASCADE。如果外键目标发生更改,这将自动更新外键。

例如(从Interbase 6语言参考中复制/修改):

CREATE TABLE T1 (P1 INTEGER NOT NULL PRIMARY KEY);
CREATE TABLE T2 (F2 INTEGER REFERENCES T1(P1)
  ON UPDATE CASCADE
  ON DELETE CASCADE);