从另一个表中删除行后从表中删除行

时间:2017-05-21 05:55:23

标签: sql postgresql

我有这个架构:

table schema

我想要做的是,在word / palabra中删除一行之后,article / articulo中所有引用它的行都将是也删除了。

请注意,这是n to n关系,因此表r1包含所有外键。

1 个答案:

答案 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;

More on triggers

旧答案:

级联删除的其他信息:

您可以使用" 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