当删除表中的一行时,如何删除所有相关表记录?

3
我有一个按钮用于删除客户。如果删除客户,则仅从客户表中删除。但是,我在付款记录表和用户评论表等表中都有客户的记录。
我在所有表中都将客户ID作为外键,但其字段名称不同。例如,在customer_details表中,我将客户ID命名为id,在其他表中我将其命名为lead_id。
我应该编写什么样的查询来从所有三个表(客户、评论、付款)中删除客户的记录?
2个回答

9
您应该使用外键的级联属性。
例如:
 FOREIGN KEY (customer_id) REFERENCES customer(id)
                      ON DELETE CASCADE

在MySQL中,是否有一种方法可以查询“系统”模式,并使用它找出哪些键级联到基础表。基本上是使用必须存在于所有级联的系统信息进行“逆向工程”?我曾经用Oracle做过这种事情。 - Michael Durrant
@Michael Durrant,我和你在这里的评论以及你在我的评论中的想法完全一样,哈哈。这是链接:https://dev59.com/jXRA5IYBdhLWcg3w1BqW - abelito
@MichaelDurrant 是的,对于每个链接到您的主表的表,您应该给出这个on delete cascade选项。 - LostMohican
1
我该如何将它用作查询?你能解释一下lostmohican吗? - Bala
@Bala.C 你不需要在查询中使用它,举个例子,如果你在person表中有一个人的ID,并将其与comment表关联起来,在comment表的定义中声明了一个列作为外键并设置了ON DELETE CASCADE,当你从person表中删除该人时,该人的评论会自动被删除。希望这对你有所帮助:) - LostMohican

0
最好先从其他表中删除,然后再最后从客户表中删除。但是你也可以一次性从所有表中删除,使用类似于以下的查询语句:
DELETE 
    FROM tbl_name1 , tbl_name2 ...
    USING table_references
    [WHERE where_condition]
希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接