Heim >Datenbank >MySQL-Tutorial >Warum erhalte ich in MySQL die Fehlermeldung „Fremdschlüsseleinschränkung kann nicht hinzugefügt werden' und wie kann ich sie beheben?

Warum erhalte ich in MySQL die Fehlermeldung „Fremdschlüsseleinschränkung kann nicht hinzugefügt werden' und wie kann ich sie beheben?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-18 20:13:10108Durchsuche

Why Am I Getting a

MySQL-Fremdschlüsseleinschränkungsfehler: Fehlerbehebung und Lösungen

Das Auftreten des „FEHLER 1215 (HY000): Fremdschlüsseleinschränkung kann nicht hinzugefügt werden“ in MySQL beim Arbeiten mit Fremdschlüsseln ist ein häufiges Problem. Dieser Fehler tritt typischerweise beim Erstellen oder Ändern von Tabellen beim Definieren von Fremdschlüsselbeziehungen auf. Das Problem liegt oft in Inkonsistenzen zwischen den zugehörigen Tabellen.

Die Fehlermeldung selbst gibt nicht immer Aufschluss über das genaue Problem. Um die spezifische Ursache zu diagnostizieren, verwenden Sie diesen Befehl:

<code class="language-sql">SHOW ENGINE INNODB STATUS;</code>

Untersuchen Sie den Abschnitt LATEST FOREIGN KEY ERROR auf detaillierte Informationen zur fehlgeschlagenen Einschränkung.

Ursachen und Lösungen

Die häufigste Ursache ist eine Nichtübereinstimmung der Datentypen zwischen der Fremdschlüsselspalte (in der untergeordneten Tabelle) und der referenzierten Primärschlüsselspalte (in der übergeordneten Tabelle). Wenn beispielsweise die Spalte der untergeordneten Tabelle SMALLINT ist und der Primärschlüssel der übergeordneten Tabelle INT ist, schlägt die Einschränkung fehl. Die Datentypen müssengenau übereinstimmen.

Eine bewährte Methode besteht darin, Fremdschlüsselprüfungen beim Erstellen von Tabellen vorübergehend zu deaktivieren, insbesondere beim Umgang mit komplexen Beziehungen. Dadurch werden Ordnungsabhängigkeiten vermieden. So geht's:

<code class="language-sql">SET FOREIGN_KEY_CHECKS = 0;
-- Your table creation statements here
SET FOREIGN_KEY_CHECKS = 1;</code>

Beispiel: Datentyp-Diskrepanzen korrigieren

Angenommen, die Tabellen Patient und Appointment verursachen den Fehler. Angenommen, Patient.MedicalHistory ist SMALLINT und medicalhistory.MedicalHistoryID ist INT. Die Lösung besteht darin, die Typkonsistenz sicherzustellen:

<code class="language-sql">CREATE TABLE IF NOT EXISTS `Patient` (
  `PatientID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `FName` VARCHAR(30) NULL,
  `LName` VARCHAR(45) NULL,
  `Gender` CHAR NULL,
  `DOB` DATE NULL,
  `SSN` DOUBLE NULL,
  `MedicalHistory` INT UNSIGNED NOT NULL,  -- Data type changed to match
  `PrimaryPhysician` SMALLINT(5) UNSIGNED NOT NULL,
  PRIMARY KEY (`PatientID`),
  UNIQUE INDEX `PatientID_UNIQUE` (`PatientID` ASC),
  CONSTRAINT `FK_MedicalHistory`
    FOREIGN KEY (`MedicalHistory`)
    REFERENCES `doctorsoffice`.`medicalhistory` (`MedicalHistoryID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `FK_PrimaryPhysician`
    FOREIGN KEY (`PrimaryPhysician`)
    REFERENCES `doctorsoffice`.`doctor` (`DoctorID`)
    ON DELETE CASCADE
    ON UPDATE CASCADE
) ENGINE = InnoDB;</code>

Durch sorgfältiges Abgleichen der Datentypen und Verwendung der empfohlenen Technik zum Deaktivieren/Aktivieren der Fremdschlüsselprüfung können Sie Fremdschlüsseleinschränkungsfehler effektiv beheben und robuste Beziehungen innerhalb Ihrer MySQL-Datenbank herstellen.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in MySQL die Fehlermeldung „Fremdschlüsseleinschränkung kann nicht hinzugefügt werden' und wie kann ich sie beheben?. 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