删除前的Firebird触发器

use*_*290 5 sql firebird triggers firebird2.5

我有两个表AUTHORBOOK连接AUTHORID.

我需要创建一个触发器,在删除作者的情况下,它首先删除该作者的书籍,然后删除作者.如果有人只是试图更新的AUTHORID领域中AUTHOR它更新AUTHORIDBOOK自动.
这甚至可行吗?:)

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 ; # 
Run Code Online (Sandbox Code Playgroud)

Mar*_*eel 6

您不需要触发器来执行此操作.要删除,您可以使用外键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);
Run Code Online (Sandbox Code Playgroud)