我有外键表,如下所示:
Table1A
|
|- Table2A3A
Table1B
|
|- Table2B
|
|- Table2A3A
(即,表2A3A引用表1A和表2B,其引用表1B。)
我想创建一个触发器,这样,当Table1A,Table1B或Table2B表中的任何内容被删除时,Table2A3A中引用已删除行的内容也会被删除。
我在问,因为如果我尝试在SQL Server中添加on delete cascade
,它会返回Introducing FOREIGN KEY constraint on table 'Table2A3A' may cause cycles or multiple cascade paths
。
这种触发器的SQL代码是什么?
抱歉,我误读了我的桌子:
Table1A
|
|- Table2A3A
|
|- Table2B
|
|- Table2A3A
(即,表2A3A参考表1A和表2B,其引用表1A。)
答案 0 :(得分:0)
根据你的图,在关系理论或SQL实践中没有理由认为级联删除应该导致循环或多个级联路径。也许您应该为每个表发布DDL,以便我们可以看到其他可能会发生的事情。
这是我作为PostgreSQL测试所写的内容。 (可以在一段时间内保存其他人。)我可以插入和删除级联。
create table Table1A (
ta_id integer primary key
);
create table Table1B (
tb_id integer primary key
);
create table Table2B (
tb_id integer primary key references Table1B (tb_id) on delete cascade
);
create table Table2A3A (
tb_id integer not null references Table2B (tb_id) on delete cascade,
ta_id integer not null references Table1A (ta_id) on delete cascade,
primary key (tb_id, ta_id)
);