我有两个表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 ; #
答案 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);