【问题标题】:MySQL - How to delete related rows in a many to many relationshipMySQL - 如何删除多对多关系中的相关行
【发布时间】:2016-09-02 21:16:21
【问题描述】:

例如,如果一个客户被删除,其他表上的所有相关行都将被删除。 mysql 怎么做,花了一个小时我尝试了很多解决方案但没有人工作。enter image description here

【问题讨论】:

  • 如果不知道您使用的是什么数据库并且不了解外键约束是什么样的,这几乎是不可能回答的。也就是说,Customer_Addresses 有一个带有级联删除功能的外键,然后从该表中删除条目将删除 CustomerAddresses 中的数据

标签: mysql sql sql-delete


【解决方案1】:

实现这一目标的最简单方法是使用ON DELETE CASCADE选项设计相关表格。

基本上,当您设计具有外键的数据库表(其他表上的主键)时,您可以为该外键设置ON DELETE CASCADE。这意味着当主表上的记录被删除(该外键为主键的表)其他表上的所有相关记录也会被删除

因此,您无需考虑创建“疯狂”查询来删除多个表上的相关数据。

您可以通过以下链接了解更多关于 ON DELETE CASCADE 的信息:mysqltutorial.org/mysql-on-delete-cascade

【讨论】:

    【解决方案2】:

    您必须先DELETE 地址,然后是客户,然后是关系 或者你可以尝试使用 DELETE cascate ...但要小心http://www.mysqltutorial.org/mysql-on-delete-cascade/ 也看到这个:MySQL on delete cascade. Test Example

    DELETE FROM Addresses WHERE AddressID IN (SELECT AddressID FROM Custormers_Addresses WHERE CustormerID = ID)

    那么 .. 删除客户 DELETE FROM Customers WHERE CustomerID = ID

    THEN .. 删除关系 DELETE AddressID FROM Custormers_Addresses WHERE CustormerID = ID

    【讨论】:

    • 您可以尝试使用UNION,如here 所述。或者考虑使用像 InnoDB 这样的事务型数据库,除非您拥有大量数据。
    猜你喜欢
    • 2011-12-07
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多