我想使用'insert into'mysql命令将table1内容移动到table2,但是table2可能具有'相同'主键。我想在执行insert语句时将table2的记录(具有相同的主键)替换为table1的记录。我可以使用'或替换'来实现这一点吗?从表1中插入或替换到表2中
回答
使用一个INSERT ... SELECT与对重复KEY UPDATE子句:
INSERT INTO table2
SELECT * FROM table1 ON DUPLICATE KEY UPDATE table2.field1 = table1.field1
注使用*为了简洁,但UPDATE子句中你必须单独指定字段,应该这么做插入和选择子句也是如此。
那么当你试图在每个表中插入'like'主键时,mysql会做什么?它会抛出一个错误吗? – alrightgame 2012-08-01 16:07:55
当你说“like”时,你的意思是重复的?然后通常是的;但它取决于您的服务器所处的模式。“ON DUPLICATE KEY”子句可以通过告诉服务器执行更新而不是抛出错误来规避该错误。 – 2012-08-01 16:15:51
尝试是这样的(不知道您的具体模式,这只能是一个例子)
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
如果指定了对重复密钥更新,和行被插入,这会在UNIQUE索引或PRIMARY KEY中产生重复值,执行旧行的更新
如果在表2是在表1键重复的主键不被其他地方的外键称,最简单的方法是使用REPLACE ... INTO:
“REPLACE作品酷似INSERT,不同之处在于,如果一个老表中的行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。“
所以,你会做这样的事情:
REPLACE INTO table2 (a, b, c)
SELECT a, b, c FROM table1;
它将table2
为你的钥匙,所以任何行挑选出具有相同ID作为table1
一排由table1
的覆盖行数据。
这真的取决于是否有外键在这里使用 - 如果有和他们正在使用级联删除 - 然后好关联的数据...这是因为'替换...到'删除然后插入 – ManseUK 2012-08-01 16:21:22
已编辑为了体现这一点,谢谢。 – 2012-08-01 16:24:20
- 1. 从1表格中插入2表格
- 2. 从表插入到表2 1
- 3. 插入触发器从表1插入到表格2
- 4. 从2个表插入1个表
- 5. 柱插入2表表1
- 6. 插入从表2表1,表1,但有主键VB.NET SQL.server
- 7. 首先选择从表1表2中以插入的mysqli PHP
- 8. 在2表中插入值,其中第2表需要第1表中的ID
- 9. 更新字段从表1到表2其中表2
- 10. 的MySQL从表1中,其中表2
- 11. 如果表2中不存在如何插入表1?
- 12. MYSQL表2中的表1更新记录插入新记录
- 13. mysql插入tbl(从2表中选择)
- 14. 如何从表1字段向表2字段插入数据
- 15. 在插入语句MySql中插入表2中自动递增的ID到表1中
- 16. JOIN 2 SQL表(表1中的1个字段替换另一个表中的1个字段)
- 17. 从表中插入多行到表
- 18. 插入到表中,从次级表
- 19. 插入或更新从插入到其他表中的一个表
- 20. Excel VBA:如果列中的值匹配,将值从表1插入表2
- 21. 根据表#1中列的值将表数据从表#1复制到表#2
- 22. GreenDao插入,插入或替换,保存
- 23. SQLite插入或替换成
- 24. 正则表达式替换“1-3”与“从1到3”格式
- 25. 如何从表-2更新到表-1
- 26. 变化DATEFORMAT而从1个表中插入到另一个
- 27. 插入到表或从一个命令
- 28. 更新表1从表2
- 29. 有条件替换与列表2元素列表1元素
- 30. SQL服务器插入数据参见表2,其中表1 =表3数据
'重复的主键'是有点矛盾...... – 2012-08-01 15:56:17
@MarcB我认为他的意思与表1的主键重复 – 2012-08-01 15:57:38
我会'相同',而不是重复尊重英语。 – alrightgame 2012-08-01 15:59:10