【问题标题】:How to remove records from mysql table, but skip records that have constraints errors?如何从 mysql 表中删除记录,但跳过有约束错误的记录?
【发布时间】:2011-08-23 17:19:47
【问题描述】:

我尝试删除记录,但出现约束错误并且查询停止。或者我使用 'delete ignore ...' 但查询也停止,只有警告。我无法设置约束检查,我只需要删除没有约束的记录。也许mysql对此有一些命令?我什么也没找到。

【问题讨论】:

    标签: mysql foreign-keys sql-delete


    【解决方案1】:

    我能想象的唯一方法是编写一个查询,从您的主表中返回没有详细信息的行,然后将此查询的结果与主表连接起来,类似于

    DELETE FROM table1 t
    INNER JOIN 
    (
       SELECT pk_column FROM table1 t1
       LEFT JOIN details1 d1 ON (d1.fk_column = t1.pk_column)
       // other LEFT JOIN[s] if you have more detail tables.
       WHERE d1.pk_column IS NULL
    )a ON t.pk_column = a.pk_column
    

    加入的另一种方法,其工作方式几乎相同,是添加WHERE NOT EXIST 来检查

    【讨论】:

    • 感谢您的回答。除了加入或外部处理程序(脚本语言)之外,似乎别无他法。在我的特殊情况下,连接是不可接受的,因为表中有 150 万条记录,等待时间很长,所以我使用外部处理程序。
    【解决方案2】:

    在表/约束定义中添加“on delete cascade”。

    【讨论】:

    • 他不想删除打破外来约束的记录,跳过它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2022-01-16
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多