【问题标题】:on delete table with foreign key delete also the referenced table在使用外键删除表时,还删除引用的表
【发布时间】:2021-10-23 09:45:41
【问题描述】:

当我删除带有外键的行时,有一种方法可以删除引用的记录吗? This is my db's tables 当我删除表“cartelle”中的记录时,我想删除表“righe”引用的3条记录

【问题讨论】:

  • 没有。当具有primary key 值的行被删除时,ON DELETE CASCADE 允许删除引用primary key 的行。尝试从另一个方向删除会很奇怪。也许你想在另一个表中创建一个 FK 约束。
  • 将表格(以文本形式)添加到问题中。解释表和列的关系和含义。您可能只是希望引用被颠倒。
  • 这能回答你的问题吗? MySQL foreign key constraints, cascade delete

标签: mysql sql foreign-keys


【解决方案1】:

只需在另一个方向添加您的参考,如下所示:

Fiddle

-- cartelle (folder)

CREATE TABLE folders ( folder_id int primary key );

-- righe (rows, tied to a folder)

CREATE TABLE xrows   (
    row_id    int primary key
  , folder_id int
  , FOREIGN KEY (folder_id) REFERENCES folders (folder_id) ON DELETE CASCADE
);


INSERT INTO folders VALUES (1), (2), (3);

INSERT INTO xrows VALUES
    (1, 1)
  , (2, 1)
  , (3, 1)
  , (4, 2)
  , (5, 3)
  , (6, 2)
;
row_id folder_id
1 1
2 1
3 1
4 2
5 3
6 2

现在当我们删除folder时,对应的rows也会被删除。

DELETE FROM folders WHERE folder_id = 1;
SELECT * FROM xrows;

结果:

row_id folder_id
4 2
5 3
6 2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多