我接管了使用mysql innodb数据库的Web应用程序的开发。事故中,客户端在数据库中有很多重复记录。我正在构建一个合并工具来保留一条记录并将其他相关数据推送到它。
所以,例如因为拼写错误,我可能会。
entity_id entity_cat common_name
--------------------------------------
abcdefg customer John Doe
hijklmn customer Jon Doe
然后我有一堆链接到entity_id的表。我想删除'hijklmn',并让其他表中的所有相关数据将'customer_entity_id'更改为'abcdef'。
问题是,关系都是删除级联。有没有办法让我合并这两个记录而不会丢失任何数据?
答案 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'