如何在innodb表中合并2行

时间:2012-08-07 17:52:43

标签: mysql sql merge duplicates innodb

我接管了使用mysql innodb数据库的Web应用程序的开发。事故中,客户端在数据库中有很多重复记录。我正在构建一个合并工具来保留一条记录并将其他相关数据推送到它。

所以,例如因为拼写错误,我可能会。

entity_id    entity_cat    common_name
--------------------------------------
abcdefg      customer      John Doe
hijklmn      customer      Jon Doe

然后我有一堆链接到entity_id的表。我想删除'hijklmn',并让其他表中的所有相关数据将'customer_entity_id'更改为'abcdef'。

问题是,关系都是删除级联。有没有办法让我合并这两个记录而不会丢失任何数据?

2 个答案:

答案 0 :(得分:0)

关于ON DELETE CASCADE问题,您可以使用下面的脚本模板临时禁用所有外键约束以进行查询:

ALTER TABLE `entities` NOCHECK CONSTRAINT ALL

-- commit query here

ALTER TABLE `entities` CHECK CONSTRAINT ALL

答案 1 :(得分:0)

如果在删除之前更新所有记录,则根本不应该有任何级联:

update other_table_1 set entity_id='abcdefg' where entity_id='hijklmn';
update other_table_2 set entity_id='abcdefg' where entity_id='hijklmn';
update other_table_3 set entity_id='abcdefg' where entity_id='hijklmn';
...
delete from user_table where entity_id='abcdefg'