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?
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!