2011-11-03 85 views
0

我想我在寻找一个叫“INSERT但忽略我的不正确钥匙落入”命令命令结合2代表具有相同的结构,但存储在不同的数据库在MySQL

我有一个表我本地机器,看起来像这样。 ID是自动递增: -

id name 
1 bob 
2 phil 

和我的另一个服务器上,看起来像这样: -

id name 
1 jane 
2 sally 

,我想从一个插入记录到另一个,所以我结束了一个表与记录1,2,3,4。

如果我走在我的本地的phpmyadmin导出选项(虽然我不挑剔管理工具),我得到这个SQL:

INSERT INTO mytable (id, name) VALUES (1, 'Bob'),(2, 'Phil') 

但我不能因为在服务器上运行此重复的键。我意识到我可以用正则表达式编辑sql,但我希望有一种更简单的方法。

回答

0

在其中一个数据库中,您可以为所有主键字段添加值,然后在插入时不会发生冲突。只要确保您为每个受影响的表(如果您合并了多个表)添加相同的值,并且每个外键字段都由任何表引用。

免责声明:以下内容将影响所有行。除非你确定你想要,否则不要执行它。

-- Add 5000 to all ids 
UPDATE tbl SET id = id + 5000; 

然后,您将能够导出并按照INSERT组合表格,而不会产生冲突。您的出口产量将如下所示:

INSERT INTO mytable (id, name) VALUES (5001, 'Bob'),(5002, 'Phil') 
+0

完美!非常感谢您的答复,我应该已经足够聪明地弄清楚了:-) – Simbo

+0

也许除此之外,将用服务器目标表中的max(id)值替换5000值?而且,一旦插入已经被执行到服务器目标表中,则运行alter table语句以将auto_increment值(假设有一个!)设置为服务器目标表的新最大值+ 1?这将阻止后续插入到服务器目标表中的重复主要违规失败。 –

相关问题