我想使用'insert into'mysql命令将table1内容移动到table2,但table2可能有'相同'的主键。我想在执行insert语句时用table1的记录替换table2的记录(具有相同的主键)。我可以使用'或替换'来实现这一目标吗?
答案 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
的文档
如果指定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
的行数据覆盖。