Mysql 错误代码:1062。键“PRIMARY”的重复条目“1”

Mysql 错误代码:1062。键“PRIMARY”的重复条目“1”,mysql,mysql-workbench,error-code,mysql-error-1062,Mysql,Mysql Workbench,Error Code,Mysql Error 1062,当我尝试此操作时,此错误消息有问题: INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) VALUES (1, 'Viale Cogel ', '

当我尝试此操作时,此错误消息有问题:

INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`,  
`data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, 
`telefono`, `mail`, `web`, `Nome-paese`, `Comune`) 
VALUES (1, 'Viale Cogel ', '120', '2012-05-21', '2012-09-30', '08:00', '23:30',
'461801243', 'informazioni@bolzano.it', 'Bolzanoturismo.it', 'Bolzano', 'BZ')
错误代码:1062。键“PRIMARY”的重复条目“1”

我没有自动增量数据,请帮帮我

这是与表格相关的UFFICIO-INFORMAZIONI

插入

生成错误的主要原因是,列ID已经存在一个值1,您可以在其中定义它,因为主键值在插入的表中是唯一的

为什么不将列ID设置为自动增量

插入记录时,现在可以跳过列ID


问题与您的文件有关-您正在尝试使用副本创建DB-在文件顶部,您会发现类似以下内容:

FOR EACH ROW
BEGIN
    INSERT INTO `history_table` (`action`,`source_id`,`status`,`time_created`)
    VALUES('update', NEW.id, NEW.status, NEW.time_created);
END;
如果不存在,则创建数据库*数据库的名称*默认字符集latin1 COLLATE latin1 \u general\u ci; 使用你的数据库的名称


我确信您已经在同一台服务器上有一个同名的DB,请检查。只需更改名称或删除此行

如果尝试从SQL转储填充表,请确保转储的INSERT INTO语句中列出的表与尝试填充的表相同。如果转储试图将条目放入MyOtherTable,而MyOtherTable可能已经有条目,那么打开MyTable并使用SQL转储进行导入将引发类似的错误。

当我遇到此类错误时,我必须将数据类型更新一个槽口。例如,如果我把它设为小整数,就把它改为小整数 ~Nita

如果您正在使用PHPMyAdmin 您可以通过执行以下操作来解决此问题:

警告:如果您想维护现有系统,请不要使用此解决方案 记录在您的表中

步骤1:选择要自定义的数据库导出方法:

步骤2:请确保在数据创建选项中插入之前选中truncate table:


现在您可以成功导入此数据库了。

我刚刚遇到了相同的问题,但这里似乎是因为我声明ID列未签名,并且ID值为“0”时,导致导入失败


因此,通过将我声明为“0”的每个ID PK列和每个相应FK的值更改为新值,我的问题得到了解决。

同时检查触发器

历史表触发器尝试将主表id插入历史表id而不是正确的hist-table.source_id列时遇到此问题

update语句根本没有触及id列,因此花了一些时间查找:

UPDATE source_table SET status = 0;
触发器尝试执行类似的操作:

FOR EACH ROW
BEGIN
    INSERT INTO `history_table` (`action`,`id`,`status`,`time_created`)
    VALUES('update', NEW.id, NEW.status, NEW.time_created);
END;
更正为如下内容:

FOR EACH ROW
BEGIN
    INSERT INTO `history_table` (`action`,`source_id`,`status`,`time_created`)
    VALUES('update', NEW.id, NEW.status, NEW.time_created);
END;

如果您有一个新的数据库,并且进行了全新的干净导入,则问题可能来自插入包含“0”增量的数据,这将通过自动增量转换为“1”,并导致此错误

我的解决方案是在sql导入文件中使用

SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';

因此,表中已经有一条ID=1的记录。由于ID是主键,因此不能有多个具有相同值的记录。你想让这个手术做什么?忽略新的插入?是否更新现有记录?替换现有记录?是否确定错误引用此表的主字段?是否引用其他表格中的其他ID?0 14:55:20插入PROGETTO.UFFICIO-INFORMAZIONI ID、viale、num_civico、data_apertura、data_chiusura、orario_apertura、orario_chiusura、telefono、mail、web、Nome paese、Comune VALUES 1、'viale Cogel','120','2012-05-21','2012-09-30','08:00','23:30','461801243','informazioni@bolzano.it','Bolzanoturismo.it','Bolzano','BZ'错误代码:1062。键“PRIMARY”的重复条目“1”可能您的外键有问题,我正试图用[sql FIDLE]复制您的问题,但没有成功。你能给出完整的数据库模式吗?我刚刚把我所有的INSERT都添加到了;没有重复的主键。。那是因为我不明白发生了什么你可能不止一次运行了插入。我已经放弃了模式,重新创建了两次。。。我总是得到同样的错误,如上所示。编辑::自动增量将是一个选项,但如果没有它,它也可以工作…在用于重新创建表的脚本中是否有插入?在脚本中,首先是创建表,然后是插入。如上图所示,该表没有其他查询/记录UFFICIO INFORMIZIONITIS是使用phpmyadmin或terminal从另一个表导入数据库时很好且节省时间的解决方案之一。当尝试在一个巨大的表上创建新索引时,我求助于重命名,从旧表创建新表,添加我的索引,然后从旧表插入。即使在空的新表上也会出现重复的主键错误。在复制数据之前截断它修复了此问题。
FOR EACH ROW
BEGIN
    INSERT INTO `history_table` (`action`,`id`,`status`,`time_created`)
    VALUES('update', NEW.id, NEW.status, NEW.time_created);
END;
FOR EACH ROW
BEGIN
    INSERT INTO `history_table` (`action`,`source_id`,`status`,`time_created`)
    VALUES('update', NEW.id, NEW.status, NEW.time_created);
END;
SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';