Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in MySQL die Fehlermeldung „Duplicate Key Constraint Violation' (Fehler 1022)?

Warum erhalte ich in MySQL die Fehlermeldung „Duplicate Key Constraint Violation' (Fehler 1022)?

Barbara Streisand
Barbara StreisandOriginal
2024-11-03 16:54:03418Durchsuche

Why am I getting a

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn