0

我在不同的数据库中有两个相似的表,我想从另一个插入一个。同时我想确保每次 mySql 遇到“重复 id”错误时,它都会在新表的底部插入行并分配一个新的唯一 id。我已经尝试过:
INSERT...SELECT...ON DUPLICATE KEY UPDATE
但是如果它找到“重复键”而不是更新前一行,我找不到让它插入新行的方法。

4

3 回答 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 回答