我在不同数据库中有两个类似的表,我想从另一个数据库中插入一个。同时,我希望确保每次mySql遇到“重复id”错误时,都会将该行插入新表的底部,并指定一个新的唯一标识。我曾尝试过:INSERT...SELECT...ON DUPLICATE KEY UPDATE
但我找不到一种方法来让它插入到一个新行,如果它找到'重复键'而不是更新前一行。在不更新旧行的情况下插入唯一行
0
A
回答
2
如果你可以指定新id
到每一条记录被复制到目标表,无论在源表中的id
是否在目的地以前存在与否,你根本无法提供id
,让MySQL来诉诸要分配默认NULL
值导致auto_increment
值:
INSERT INTO destdb.tbl (colA, colB, colC)
SELECT colA, colB, colC
FROM srcdb.tbl
否则,你将需要使用像NULLIF()
明确设置id
到NULL
它已经存在,基于连接表一起:
INSERT INTO destdb.tbl (id, colA, colB, colC)
SELECT NULLIF(src.id, dst.id), src.colA, src.colB, src.colC
FROM srcdb.tbl src LEFT JOIN destdb.tbl dst USING (id)
1
据当时http://dev.mysql.com/doc/refman/5.1/de/insert-select.html的文档,这可能与查询来实现:
INSERT INTO `table2` SELECT (NULL, col1, col2, col3) FROM `table1`
这种方式,自动增量值是留给“NULL”,导致发动机给它是一个新的AI值,而不是试图强制现有的AI值。
请不要让我的语法,我没有测试过这个。
0
If the id is autoincrement:
Create an additional column in the second table with a reference to the id value in the first table
Sample Select Query:
SELECT unique_id, data FROM table_1 WHERE id='$id'
Sample Insert Query:
INSERT INTO table_2 (table_1_unique_id, data) VALUES ($unique_id_from_first_table, $data)
This will solve any duplicate id problems and allow referencing between the two tables
相关问题
- 1. 插入新行,更新旧行:如何?
- 2. 如何在不插入的情况下更新Django模型?
- 3. 在不存在记录的情况下用SQL插入多行
- 4. 可能在不插入新行的情况下获得用户输入?
- 5. 在不修改旧数据的情况下更新数据
- 6. 在不擦除旧模型的情况下更新Backbone.js集合
- 7. 在不覆盖第一行的情况下写入.csv文件中的新行
- 8. 在不覆盖数据的情况下插入行
- 9. 在表中插入新行而不更新旧表
- 10. 在条件允许的情况下插入或更新
- 11. 情况下,更新
- 12. 在没有循环的情况下在MySQL中更新多行
- 13. 如何在不更新旧记录的情况下使用Hibernate session.save()插入/保存对象
- 14. 如何在不影响每一行的情况下进行foreach?
- 15. 如何在这种情况下更新我的行?
- 16. 在任何情况下如何将文本插入空行?
- 17. Oracle:在不更改数据的情况下运行更新触发器
- 18. 在不打开Eclipse IDE的情况下运行插件
- 19. 如何在不删除旧的php和mysql的情况下更新记录?
- 20. 在更新它插入另一行
- 21. 在不更新url的情况下更新ng-view
- 22. 运行从终端的R新版本时,旧版本在默认情况下
- 23. 用户界面更新在不同情况下的行为不同
- 24. Magento。在不更改模板代码的情况下将块插入另一个
- 25. 如何在不进入AJAX的情况下对一行html输入字段进行重新排序
- 26. saveAll()插入新行而不是更新
- 27. 在不使用SaveChanges的情况下更新一对多关系
- 28. 在不使用update_all的情况下在rails中进行批量更新?
- 29. 如何在不输出新行的情况下在Python中查询输入
- 30. 在不使用“.append”的情况下追加新行文本
'键'是自动增量值吗?如果是这样,我可能会为你解决。尝试'INSERT INTO table2'SELECT NULL,col1,col2,col3 FROM table1'我手边没有准确的语法,但它应该以这种方式工作。 – ATaylor 2012-07-23 13:36:35
是'钥匙'是一个自动增量字段。谢谢,我会试试这个。 – IROEGBU 2012-07-23 13:40:07
不客气。这听起来很高兴,如果你得到它的工作:) – ATaylor 2012-07-23 13:42:50