Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何增加数据库中的每个外键?_Mysql - Fatal编程技术网

Mysql 如何增加数据库中的每个外键?

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; 在旧数据库中:

我有两个具有相同模式的大型MySQL数据库要合并。为此,我希望将一个数据库的每个外键和id增加1000万,然后将修改后的数据库的所有记录插入到另一个数据库中

我曾考虑过使用grep和gawk等工具编辑mysqldump,但这似乎很难做到。最好的方法是什么

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我会使用原始数据进行mysql转储,然后更改新数据库中的值。如果FK/PK字段有级联更新,那么更新表set PK_field=PK_field+10000000应该是一件简单的事情。级联将处理外键。然后将这个数据库转储到一个文件中,并加载到另一个数据库中。该数据库有206个表,其中有许多FK引用。手动设置字段不是选项。@标记,很好。但是我如何处理具有自引用FKs的表呢?如果他要将一个合并到另一个,我会放弃约束。您不希望在更新数百万行时产生索引维护等开销。他将导出数据并导入到第一个数据库中,相应的约束将存在于该数据库中。mysqldump-opt database>backup-file.sql?这还包括CREATE TABLE语句,对吗?我如何避免这种情况?谢谢。阅读文档,做一些研究。在回答你的问题之前我不知道,但我花了1分钟找到它。。。