我想使用 'insert into' mysql 命令将 table1 的内容移动到 table2,但 table2 可能具有“相同”的主键。执行插入语句时,我想用 table1 的记录替换 table2 的记录(具有相同的主键)。我可以使用“或替换”来实现这一点吗?
问问题
2146 次
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
如果您指定 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 回答