错误代码:1062。密钥'PRIMARY'的重复条目'1'

时间:2013-01-31 14:35:48

标签: 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 ', '120', '2012-05-21', '2012-09-30', '08:00', '23:30',
'461801243', 'informazioni@bolzano.it', 'Bolzanoturismo.it', 'Bolzano', 'BZ')

错误代码:1062。密钥'PRIMARY'重复输入'1'

我没有auto_increment数据,请帮助我!

这是相关的表格, UFFICIO-INFORMAZIONI

CREATE  TABLE IF NOT EXISTS `PROGETTO`.`UFFICIO-INFORMAZIONI` (
  `ID` INT(11) NOT NULL ,
  `viale` VARCHAR(45) NULL ,
  `num_civico` VARCHAR(5) NULL ,
  `data_apertura` DATE NULL ,
  `data_chiusura` DATE NULL ,
  `orario_apertura` TIME NULL ,
  `orario_chiusura` TIME NULL ,
  `telefono` VARCHAR(15) NULL ,
  `mail` VARCHAR(100) NULL ,
  `web` VARCHAR(100) NULL ,
  `Nome-paese` VARCHAR(45) NOT NULL ,
  `Comune` CHAR(2) NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `Nome_paese` (`Nome-paese` ASC) ,
  INDEX `Comune` (`Comune` ASC) ,
  CONSTRAINT `Nome_paese`
    FOREIGN KEY (`Nome-paese` )
    REFERENCES `PROGETTO`.`PAESE` (`Nome-paese` )
    ON DELETE NO ACTION
    ON UPDATE CASCADE,
  CONSTRAINT `Comune`
    FOREIGN KEY (`Comune` )
    REFERENCES `PROGETTO`.`PAESE` (`Comune` )
    ON DELETE NO ACTION
    ON UPDATE CASCADE)
ENGINE = InnoDB

插入

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');
    INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) VALUES (2, 'Via Olmo', '45', '2012-05-01', '2012-09-30', '08:00', '23:30', '393495169301', 'informazioni@lech.it', 'Lechinformation.it', 'Lech', 'BZ');
    INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) VALUES (3, 'Via Quercia', '37', '2012-05-11', '2012-09-30', '08:00', '23:30', '393381679321', 'info@trento.it', 'Trentoinformaiozni.it', 'Trento', 'TN');
    INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) VALUES (4, 'Via Atene', '76', '2012-06-01', '2012-09-15', '08:00', '23:30', '39349361345', 'info@sanmartinodicastrozza.it', 'SanMartino.it', 'San Martino di Castrozza', 'TN');
    INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) VALUES (5, 'Via Salice', '45', '2012-05-01', '2012-09-20', '08:00', '23:30', NULL, 'info@pejo.it', 'Pejoturismo.it', 'Pejo', 'TN');
    INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`ID`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) VALUES (6, 'Piazza Sempreverde', '34', '2012-05-15', '2012-09-15', '08:00', '23:30', '392516789', 'info@ortisei.it', 'Ortisei.it', 'Ortisei', 'BZ');

8 个答案:

答案 0 :(得分:22)

生成错误的 main 原因是因为1列的现有值ID,您将其定义为{{1}您要插入的表中的(值是唯一的)。

为什么不将列PRIMARY KEY设置为ID

AUTO_INCREMENT

当您插入记录时,您现在可以跳过列CREATE TABLE IF NOT EXISTS `PROGETTO`.`UFFICIO-INFORMAZIONI` ( `ID` INT(11) NOT NULL AUTO_INCREMENT, `viale` VARCHAR(45) NULL , .....

ID

答案 1 :(得分:18)

如果您使用 PHPMyAdmin 您可以通过以下方式解决此问题:

  

注意:如果您想维护现有解决方案,请不要使用此解决方案   你桌子上的记录。

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

enter image description here

第2步:请确保在插入数据创建选项之前检查截断表:

enter image description here

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

答案 2 :(得分:7)

如果您尝试从SQL转储填充表,请确保" INSERT INTO"中列出的表格。转储的语句与您尝试填充的语句相同。打开" MyTable"如果转储尝试将条目放入" MyOtherTable",这可能已经有条目,那么使用SQL转储导入将完全抛出那种错误。

答案 3 :(得分:2)

问题与您的文件有关 - 您正在尝试使用副本创建数据库 - 在文件顶部您会看到如下内容:

创建数据库,如果不是EXISTS *THE_NAME_OF_YOUR_DB*默认字符集latin1 COLLATE latin1_general_ci; 使用*THE_NAME_OF_YOUR_DB*;

并且我确定您已经拥有一个具有此名称的数据库 - 在同一台服务器中 - 请检查。只需更改名称或删除此行!

答案 4 :(得分:2)

当我遇到这种错误时,我不得不更新数据类型。例如,如果我将它作为“tiny int”将其更改为“small int” 〜尼塔

答案 5 :(得分:1)

我刚刚遇到了同样的问题,但这里似乎是因为我宣布ID列是未对齐的,并且结合ID值为' 0' (零)导致导入失败......

因此,通过更改我声明的每个ID(PK列)的值' 0'并且每个相应的FK到新值,我的问题就解决了。

答案 6 :(得分:0)

还要检查触发器。

通过历史记录表触发器遇到此问题,该触发器试图将主表id插入历史记录表id而不是正确的hist-tablesource_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;

答案 7 :(得分:0)

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

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

SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';