0

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

4

3 回答 3

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

于 2012-08-01T15:59:43.340 回答
2

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

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

注意使用 * 为简洁起见,但在 update 子句中您必须单独指定字段,并且在 insert 和 select 子句中也应该这样做。

于 2012-08-01T16:00:48.790 回答
0

如果 table2 中与 table1 中的键重复的主键在其他地方没有被外键引用,最简单的方法是使用REPLACE ... INTO

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

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

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

它将为您整理出键,因此与行table2具有相同 ID 的任何行都会被的行数据table1覆盖。table1

于 2012-08-01T16:14:20.097 回答