编辑:原回答有错误的假设。这是新的答案:
要删除文章行,您可以使用触发器。这将在您的外键约束级联删除之前运行,因为它具有“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”允许您的关系表在所指向的内容被删除时自动清理。这样,当单词来源被删除时,文章中的单词也会被删除,并且如果文章被删除,则与文章相关的所有单词关系数据也将被删除,前提是这是所期望的。如果删除了关系,则不会影响单词或文章表中的任何行。
还有其他选项可用于设置外部行更改/删除时的自动行为。这里some info提供了有关MySQL的信息。
"