从table1插入或替换到table2

时间:2012-08-01 15:55:02

标签: mysql insert

我想使用'insert into'mysql命令将table1内容移动到table2,但table2可能有'相同'的主键。我想在执行insert语句时用table1的记录替换table2的记录(具有相同的主键)。我可以使用'或替换'来实现这一目标吗?

3 个答案:

答案 0 :(得分:3)

尝试这样的事情(不知道你的确切模式,这只是一个例子)

INSERT INTO tbl_a (a,b,c)
SELECT a,b,c FROM tbl_b 
ON DUPLICATE KEY UPDATE b = tbl_b.b, c = tbl_b.c

来自INSERT on DUPLICATE

的文档
  

如果指定ON DUPLICATE KEY UPDATE,并且插入的行将导致UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行的UPDATE

答案 1 :(得分:2)

使用带有ON DUPLICATE KEY UPDATE子句的INSERT ... SELECT:

INSERT INTO table2 
  SELECT * FROM table1 ON DUPLICATE KEY UPDATE table2.field1 = table1.field1

注意使用*表示简洁,但在更新子句中,必须单独指定字段, 应在插入中执行此操作选择条款。

答案 2 :(得分:0)

如果table2中的主键与table1中的键重复,则其他地方的外键不会引用它,最简单的方法是使用REPLACE ... INTO

“REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。” / p>

所以,你会做这样的事情:

REPLACE INTO table2 (a, b, c)
SELECT a, b, c FROM table1;

它将为您排序键,因此table2中与table1中的行具有相同ID的所有行都会被table1的行数据覆盖。