use*_*290 5 sql firebird triggers firebird2.5
我有两个表AUTHOR并BOOK连接AUTHORID.
我需要创建一个触发器,在删除作者的情况下,它首先删除该作者的书籍,然后删除作者.如果有人只是试图更新的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 ; #
Run Code Online (Sandbox Code Playgroud)
您不需要触发器来执行此操作.要删除,您可以使用外键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)