如果已经在这些行上设置了外键关系,如何从MySQL表中删除重复的行 是否可以以某种方式合并重复项,然后使用新值更新外键?
答案 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。
如果这些都不是所需的行为,请通过更改外键列来制作解决外键冲突的查询,以便它们引用您要保留的行(即,更新所有订单以引用非重复客户) ,然后删除有问题的行。
另一个替代方法是暂时禁用外键检查,但这会使您的数据库不一致,所以我不建议这样做。