Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in MySQL die Fehlermeldung „Duplicate Key Constraint Violation' (Fehler 1022)?
Verstoß gegen doppelte Schlüsseleinschränkungen in MySQL: Fehler 1022
MySQL Workbench hat den folgenden SQL-Code generiert, um eine Tabelle zu erstellen:
<code class="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</code>
Bei der Ausführung schlägt diese Abfrage mit dem folgenden Fehler fehl:
<code class="sql">ERROR 1022 (23000): Can't write; duplicate key in table 'errors_reports'</code>
Analyse
Anfangs schien die Primärschlüsseldefinition gültig zu sein, da es nur eine gab ein Primärschlüssel definiert. Das Problem liegt jedoch bei den Fremdschlüssel-Einschränkungsnamen (error_id und report_short).
Auflösung
MySQL lässt keine Fremdschlüssel-Einschränkungen zu innerhalb der gesamten Datenbank den gleichen Namen haben. Da die Tabelle „errors_reports“ über zwei Fremdschlüsseleinschränkungen verfügt, die auf andere Tabellen verweisen, muss sichergestellt werden, dass ihre Einschränkungsnamen eindeutig sind.
Um den Fehler zu beheben, benennen Sie eine oder beide Fremdschlüsseleinschränkungen um. Anstelle von „error_id“ könnte es beispielsweise „error_id_ref“ heißen.
Beispiel
<code class="sql">CONSTRAINT `error_id_ref` FOREIGN KEY (`error_id` ) REFERENCES `mydb`.`errors` (`error_id` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `report_short_ref` FOREIGN KEY (`report_short` ) REFERENCES `mydb`.`reports` (`report_short` ) ON DELETE NO ACTION ON UPDATE NO ACTION)</code>
Zusammenfassung
Wenn der MySQL-Fehler 1022 im Zusammenhang mit einem doppelten Schlüssel auftritt, ist es wichtig, nicht nur die Primärschlüsseldefinition, sondern auch die Namen aller Fremdschlüsseleinschränkungen zu überprüfen. Wenn Sie sicherstellen, dass diese Einschränkungen eindeutige Namen haben, wird verhindert, dass der Fehler auftritt.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in MySQL die Fehlermeldung „Duplicate Key Constraint Violation' (Fehler 1022)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!