Answers:
您也可以尝试:
INSERT IGNORE
INTO table_1
SELECT *
FROM table_2
;
这允许table_1中的那些行取代table_2中具有匹配的主键的那些行,同时仍然插入具有新主键的行。
或者,
REPLACE
INTO table_1
SELECT *
FROM table_2
;
将使用来自表_2的对应行更新表_1中已经存在的行,同时插入具有新主键的行。
INSERT
INTO first_table f
SELECT *
FROM second_table s
ON DUPLICATE KEY
UPDATE
s.column1 = DO_WHAT_EVER_MUST_BE_DONE_ON_KEY_CLASH(f.column1)
Syntax error, unexpected IDENT_QUOTED
无论如何,我都会通过MySQL Workbench 获得的。
如果需要手动执行,请一次:
首先,在临时表中合并以下内容:
create table MERGED as select * from table 1 UNION select * from table 2
然后,使用类似以下内容识别主键约束
SELECT COUNT(*), PK from MERGED GROUP BY PK HAVING COUNT(*) > 1
其中PK是主键字段...
解决重复项。
重命名表。
[已编辑-删除了UNION查询中的方括号,这在下面的注释中引起了错误]
听起来并不复杂...。只需将重复的主键放在查询之外....这对我有用!
INSERT INTO
Content(
`status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
)
SELECT `status`,
content_category,
content_type,
content_id,
user_id,
title,
description,
content_file,
content_url,
tags,
create_date,
edit_date,
runs
FROM
Content_Images
你可以写一个脚本来更新FK对你..看看这个博客:http://multunus.com/2011/03/how-to-easily-merge-two-identical-mysql-databases/
他们有一个聪明的脚本,可以使用information_schema表获取“ id”列:
SET @db:='id_new';
select @max_id:=max(AUTO_INCREMENT) from information_schema.tables;
select concat('update ',table_name,' set ', column_name,' = ',column_name,'+',@max_id,' ; ') from information_schema.columns where table_schema=@db and column_name like '%id' into outfile 'update_ids.sql';
use id_new
source update_ids.sql;