我在不同的数据库中有两个相似的表,我想从另一个中插入一个。同时我想确保每次mySql遇到“重复ID”错误时,它会在新表的底部插入行并分配一个新的唯一ID。我试过了:
INSERT...SELECT...ON DUPLICATE KEY UPDATE
如果它找到'重复键'而不是更新前一行,我找不到让它插入新行的方法。
答案 0 :(得分: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)
答案 1 :(得分: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值,而不是试图强制其中的现有值。
请不要吝啬我的语法,我没有测试过。
答案 2 :(得分: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