INSERT INTO ... SELECT - 主键冲突 - 错误#1062

时间:2014-06-17 09:35:09

标签: mysql sql primary-key insert-into

我有一个数据库:groupofficecom有两个表:

cal_events: id(Primary key), name, start_time, description,....
cf_cal_events: model_id (Primary key), col_1, col_2, col_3,....

我正在尝试执行以下代码:

INSERT INTO groupofficecom.cf_cal_events (model_id,col_1,col_2,....)
SELECT groupofficecom.cal_events.ID, '0' AS col_1, '' AS col_2,....
FROM groupofficecom.cal_events

但它一直给我错误#1062 - 重复条目'155'('155'是来自cal_events的'id')关键'PRIMARY'

我希望主键model_id与cal_events中的id值相同,因为表cf_cal_events只是cal_events的补充字段(这是一个程序,因此我无法更改其数据库,它将在第一次更新时消失)

谢谢你们!

2 个答案:

答案 0 :(得分:1)

这意味着目标表中已存在具有该id的条目。 首先,检查一下这是怎么回事。

然后,使用此处描述的解决方案之一: "INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE" 即UPDATE或IGNORE。

您应该使用ORDER BY和您拥有的选择以及上面的解决方案来选择忽略哪些条目(除IGNORE的第一个条目外)。

您可能还需要完全不同的东西,即使用UPDATE语句而不是INSERT语句。

答案 1 :(得分:1)

事实上我发现了一个非常好的功能,它与INSERT非常相似但更聪明:

REPLACE INTO database (column_1, column_2)
SELECT source_column1, 'value' AS column2
FROM table;

或者:

REPLACE INTO database (column_1, column_2)
VALUES ('value1', 'value2')
FROM table;

像魔术一样工作!

它将新项目插入到目标表中,如果它找到具有相同主键值的行,则会删除它并重新插入新值(它非常适合从另一个表更新表)

我希望这能解决你解决我的问题;)