删除MySQL表中的重复行但存在外键关系?

时间:2010-08-03 16:23:33

标签: php mysql foreign-keys duplicates

如果已经在这些行上设置了外键关系,如何从MySQL表中删除重复的行 是否可以以某种方式合并重复项,然后使用新值更新外键?

1 个答案:

答案 0 :(得分:2)

如果外键是ON DELETE CASCADE,则删除重复行也将删除相关行,例如,如果您有一个表customers和一个表orders,以及一个外来行密钥如ALTER TABLE orders ADD FOREIGN KEY customer_id REFERENCES customers (id) ON DELETE CASCADE,然后删除客户也将删除该客户的订单。同样,如果外键有ON DELETE SET NULL,则不会删除订单,但会将customer_id值设置为NULL。

如果这些都不是所需的行为,请通过更改外键列来制作解决外键冲突的查询,以便它们引用您要保留的行(即,更新所有订单以引用非重复客户) ,然后删除有问题的行。

另一个替代方法是暂时禁用外键检查,但这会使您的数据库不一致,所以我不建议这样做。

相关问题