我在不同的数据库中有两个相似的表,我想从另一个插入一个。同时我想确保每次 mySql 遇到“重复 id”错误时,它都会在新表的底部插入行并分配一个新的唯一 id。我已经尝试过:INSERT...SELECT...ON DUPLICATE KEY UPDATE
但是如果它找到“重复键”而不是更新前一行,我找不到让它插入新行的方法。
问问题
101 次
3 回答
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
它已经存在的位置,基于将表连接在一起SELECT
:
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)
于 2012-07-23T13:38:34.410 回答
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 值,而不是尝试将现有的值强制其中。
请不要因为语法给我扔石头,我还没有测试过。
于 2012-07-23T13:45:05.470 回答
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
于 2012-07-23T13:46:22.890 回答