Mysql 如何增加数据库中的每个外键?
我有两个具有相同模式的大型MySQL数据库要合并。为此,我希望将一个数据库的每个外键和id增加1000万,然后将修改后的数据库的所有记录插入到另一个数据库中 我曾考虑过使用grep和gawk等工具编辑mysqldump,但这似乎很难做到。最好的方法是什么Mysql 如何增加数据库中的每个外键?,mysql,Mysql,我有两个具有相同模式的大型MySQL数据库要合并。为此,我希望将一个数据库的每个外键和id增加1000万,然后将修改后的数据库的所有记录插入到另一个数据库中 我曾考虑过使用grep和gawk等工具编辑mysqldump,但这似乎很难做到。最好的方法是什么 UPDATE TABLE mytable_foreign SET ID = ID + 10000000; UPDATE TABLE mytable SET FOREIGN_ID = FOREIGN_ID + 10000000; 在旧数据库中:
UPDATE TABLE mytable_foreign SET ID = ID + 10000000;
UPDATE TABLE mytable SET FOREIGN_ID = FOREIGN_ID + 10000000;
在旧数据库中:
删除ID和外部ID上的约束
使用上面的查询更新数据
仅将数据备份为INSERT语句
在新数据库中:
插入备份文件
将两个数据库转储到同一服务器中。一个是目标计划 将数据库1转储到最终的_方案中 将数据库2转储到aux_方案中 对每一张桌子都这样做我希望这不会很困难:
insert into final_scheme.tableA
select id+1000000, name, etc, fk_id+1000000 from aux_scheme.tableA
我这样做是为了进行部分合并,这只是一些表,工作正常。好的,下面是我使用information\u模式和bash脚本实现的解决方案。首先,我获取数据库中的每个键列及其所在的表,然后更新这些列中的每一列 echo将每个主键和外键递增$increment 从信息模式中获取每个键的表名和列名 select_constraints_sql=从键中选择表名、列名,其中CONSTRAINT_SCHEMA='MyDB' 将查询结果放入数组中 data=$mysql-e$select\u constraints\u sql-sN-user=$username-password=$passwd information\u schema 逐步检查表和键,并在禁用外键检查的情况下更新每个表和键 每一步都必须禁用外键检查 忽略\u fks\u sql=设置外键\u检查=0 cnt=${data[@]} 对于i=0;i