【问题标题】:How to delete all the related table records when deleting a row in a table?删除表中的一行时如何删除所有相关的表记录?
【发布时间】:2011-11-26 13:34:58
【问题描述】:

我有一个删除客户的按钮。如果客户被删除,它只会从客户表中删除。但是我在诸如付款(添加了所有付款记录)和 cmets(添加了所有用户 cmets)之类的表中有客户的记录。

我在所有表中都有客户 ID 作为外键。但它的字段名称不同。例如,在 customer_details 表中,客户 ID 以 id 的名称命名,而在其他表中,我以lead_id 命名。

我应该编写什么样的查询来从所有三个(客户、cmets、付款)表中删除客户的记录?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    你应该使用外键的级联属性

    例如

     FOREIGN KEY (customer_id) REFERENCES customer(id)
                          ON DELETE CASCADE
    

    【讨论】:

    • mysql 中有没有一种方法可以查询“系统”模式,并使用该方法找出哪些键级联链接到底层基表。基本上“逆向工程”使用所有级联都必须存在的系统信息?我曾经用 Oracle 做这种事情。
    • @Michael Durrant,我的想法与您在这里的评论以及您对我的评论完全相同,哈哈。给你:stackoverflow.com/questions/806989/…
    • @MichaelDurrant 是的,对于链接到您的主表的每个表,您应该在删除级联选项时提供此选项
    • 如何将其用作查询?你能解释一下lostmohican吗?
    • @Bala.C 您不必在查询中使用它,例如,如果您在人员表上有人员 ID 并使用评论表引用它,并且在评论表的定义中声明了列作为外键和 ON DELETE CASCADE,当您从人员表中删除人员时,人员的 cmets 将自动删除。我希望这是给你的答案:)
    【解决方案2】:

    最好先从其他表中删除,然后再从客户表中删除。但是您可以一次从所有表中删除,使用类似这样的查询:

    删除 从 tbl_name1 , tbl_name2 ... 使用 table_references [WHERE where_condition]

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2019-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      相关资源
      最近更新 更多