繁体   English   中英

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

[英]delete rows from table after delete row from another table

我有这个架构:

表模式

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

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

编辑:原始答案有错误的假设。 这是新的答案:

要删除文章行,可以使用触发器。 由于“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的这个主题的一些信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM