我有这个架构:
我想要做的是,在word
/ palabra
中删除一行之后,article
/ articulo
中所有引用它的行都将是也删除了。
请注意,这是n to n
关系,因此表r1
包含所有外键。
答案 0 :(得分:0)
要删除文章行,您可以使用触发器。这将在您的外键约束级联删除之前运行,因为" BEFORE DELETE"节。
CREATE TRIGGER before_delete_word_trigger
BEFORE DELETE ON word
FOR EACH ROW
BEGIN
DELETE FROM article
WHERE article.id_article IN
(SELECT DISTINCT id_article FROM R1 where R1.id_word = deleted.id_word)
END;
旧答案:
级联删除的其他信息:
您可以使用" ON DELETE"外键约束中的子句用于触发关系表上的行为。
CREATE TABLE R1
(
id_r1 serial NOT NULL PRIMARY KEY,
id_article int NOT NULL,
id_word int NOT NULL,
CONSTRAINT fk_r1_word
FOREIGN KEY (id_word)
REFERENCES words (id_word)
ON DELETE CASCADE,
CONSTRAINT fk_r1_article
FOREIGN KEY (id_article)
REFERENCES articles (id_article)
ON DELETE CASCADE
);
" ON DELETE CASCADE"允许您的关系表在其指向的内容被删除后自行清理。这样,当删除单词的来源时,您的文章总是删除其单词,并且如果文章被删除,则删除与该文章相关联的所有单词关系数据,假设需要。如果删除关系,则不会影响word或article表中的任何行。
当更改/删除外部行时,还有其他选项可用于设置自动行为。这是关于MySQL的这个主题的some info。