21

MySQL Workbench は、テーブルを作成するために次の SQL を考え出しました。

CREATE  TABLE IF NOT EXISTS `mydb`.`errors_reports` (
   `error_id` INT NOT NULL ,
   `report_short` VARCHAR(15) NOT NULL ,
PRIMARY KEY (`error_id`, `report_short`) ,
INDEX `error_id_idx` (`error_id` ASC) ,
INDEX `report_short_idx` (`report_short` ASC) ,
CONSTRAINT `error_id`
   FOREIGN KEY (`error_id` )
   REFERENCES `mydb`.`errors` (`error_id` )
   ON DELETE NO ACTION
   ON UPDATE NO ACTION,
CONSTRAINT `report_short`
   FOREIGN KEY (`report_short` )
   REFERENCES `mydb`.`reports` (`report_short` )
   ON DELETE NO ACTION
   ON UPDATE NO ACTION)
ENGINE = InnoDB

私のデータベースには、MySQL が完全に喜んで作成した他の非常によく似たテーブルがたくさんあります。

しかし、これは...

ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'

私の人生では、ここで重複したキーを見ることはできません。定義されているキーは 1 つだけです。

デフォルトの新規インストールで MySQL 5.6 を実行しています。エラーログには何もありません。

アイデア?

編集:削除のプロセス(テーブルの最も単純な定義に戻り、徐々にビットを追加し直す)を通じて、問題は次のビットのように見えます:

CONSTRAINT `error_id`
    FOREIGN KEY (`error_id` )
    REFERENCES `mydb`.`errors` (`error_id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,

他のいくつかのテーブル定義に同一のコードがあり、それらは完全に問題ないため、これは特に奇妙です!

4

3 に答える 3

2

外部キー列にインデックスを作成しているようです。InnoDb で外部キーを作成すると、自動的に作成されます。

このスレッドを参照してください

于 2013-02-22T00:28:07.490 に答える
-2

重複する主キーが見つかった場合、 INSERT IGNORE が新しい行を挿入しないINSERT IGNORE代わりに使用してみてください。INSERTこれは一時的な問題の解決に役立つはずですが、テーブルを切り捨てることをお勧めします。

于 2013-02-22T00:22:11.103 に答える