web-dev-qa-db-ja.com

エラーコード:1062.キー 'PRIMARY'の重複したエントリ '1'

私はこれを試してみると、このエラーメッセージに問題があります:

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', '[email protected]', 'Bolzanoturismo.it', 'Bolzano', 'BZ')

エラーコード:1062.キー「PRIMARY」のエントリ「1」が重複しています

Auto_incrementデータがありません。助けてください!

これは、関連するテーブルですFFICIO-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

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', '[email protected]', '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', '[email protected]', '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', '[email protected]', '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', '[email protected]', '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, '[email protected]', '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', '[email protected]', 'Ortisei.it', 'Ortisei', 'BZ');
22
FrancescoN

の メイン エラーが生成された理由は、列ID1の既存の値が既に存在するためです。この値はPRIMARY KEYとして定義します(-values unique =)挿入するテーブル内。

IDAUTO_INCREMENTとして設定しないのはなぜですか?

CREATE  TABLE IF NOT EXISTS `PROGETTO`.`UFFICIO-INFORMAZIONI` (
  `ID` INT(11) NOT NULL AUTO_INCREMENT,
  `viale` VARCHAR(45) NULL ,
   .....

レコードを挿入するときに、列IDをスキップできるようになりました

INSERT INTO `PROGETTO`.`UFFICIO-INFORMAZIONI` (`viale`, `num_civico`, ...) 
VALUES ('Viale Cogel ', '120', ...)
22
John Woo

PHPMyAdminを使用している場合、これを行うことでこの問題を解決できます。

注意:テーブル内の既存のレコードを維持する場合は、このソリューションを使用しないでください。

ステップ1:カスタムへのデータベースエクスポート方法の選択:

enter image description here

ステップ2:データ作成オプションに挿入する前に、必ずテーブルの切り捨てを確認してください:

enter image description here

これで、このデータベースを正常にインポートできます。

18

SQLダンプからテーブルを作成しようとしている場合は、ダンプの「INSERT INTO」ステートメントにリストされているテーブルが、作成しようとしているものと同じであることを確認してください。 「MyTable」を開き、SQLダンプでインポートすると、ダンプが「MyOtherTable」にエントリを入れようとしている場合、まさにそのようなエラーがスローされます。

7
CodeOwl

問題はファイルに関連しています-コピーを使用してDBを作成しようとしています-ファイルの上部に次のようなものがあります。

存在しない場合はデータベースを作成*THE_NAME_OF_YOUR_DB* DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci;使用*THE_NAME_OF_YOUR_DB*;

そして、あなたはすでに同じ名前のデータベースを持っていると確信しています-同じサーバーで-確認してください。名前を変更するだけでORこの行を削除します!

2
bito_

この種のエラーが発生した場合、ノッチでデータ型を更新する必要がありました。たとえば、「tiny int」として持っている場合、「small int」に変更します〜Nita

2
Nita

私はちょうど同じ問題に遭遇しましたが、ここではID列をUNsignedと宣言し、ID値「0」(ゼロ)と組み合わせてインポートが失敗したという事実に由来するようです...

そのため、「0」と対応するすべてのFKを宣言したすべてのID(PK列)の値を新しい値に変更することで、問題を解決しました。

1
user4563764

新しいデータベースがあり、新規のクリーンインポートを行う場合、「0」増分を含むデータを挿入すると問題が発生する可能性があり、AUTO_INCREMENTで '1'に変換され、このエラーが発生します。

私の解決策は、sqlインポートファイルで使用することでした。

SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';
1
Andrada

トリガーも確認してください。

これは、正しいhist-table.source_id列ではなく、履歴テーブルidにメインテーブルidを挿入しようとした履歴テーブルトリガーで発生しました。

更新ステートメントは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
sastorsl