MySQL-Fehler 1215: Fremdschlüssel-Beschränkung kann nicht hinzugefügt werden

Ich versuche, mein neues Schema auf meinem DB-Server weiterzuentwickeln, aber ich kann nicht herausfinden, warum ich diesen Fehler erhalte. Ich habe versucht, hier nach der Antwort zu suchen, aber alles, was ich gefunden habe, besagt, dass ich entweder die DB-Engine auf Innodb einstellen oder sicherstellen soll, dass die Schlüssel, die ich als Fremdschlüssel zu verwenden versuche, Primärschlüssel in ihren eigenen Tabellen sind. Ich habe beides getan, wenn ich mich nicht irre. Könnt ihr mir sonst noch helfen?

Executing SQL script in server

ERROR: Error 1215: Cannot add foreign key constraint

-- -----------------------------------------------------
-- Table `Alternative_Pathways`.`Clients_has_Staff`
-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` (
  `Clients_Case_Number` INT NOT NULL ,
  `Staff_Emp_ID` INT NOT NULL ,
  PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) ,
  INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) ,
  INDEX `fk_Clients_has_Staff_Clients_idx` (`Clients_Case_Number` ASC) ,
  CONSTRAINT `fk_Clients_has_Staff_Clients`
    FOREIGN KEY (`Clients_Case_Number` )
    REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Clients_has_Staff_Staff1`
    FOREIGN KEY (`Staff_Emp_ID` )
    REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

SQL-Skriptausführung beendet: Anweisungen: 7 erfolgreich, 1 fehlgeschlagen

Hier ist die SQL-Anweisung für die übergeordneten Tabellen.

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients` (
  `Case_Number` INT NOT NULL ,
  `First_Name` CHAR(10) NULL ,
  `Middle_Name` CHAR(10) NULL ,
  `Last_Name` CHAR(10) NULL ,
  `Address` CHAR(50) NULL ,
  `Phone_Number` INT(10) NULL ,
  PRIMARY KEY (`Case_Number`) )
ENGINE = InnoDB

CREATE  TABLE IF NOT EXISTS `Alternative_Pathways`.`Staff` (
  `Emp_ID` INT NOT NULL ,
  `First_Name` CHAR(10) NULL ,
  `Middle_Name` CHAR(10) NULL ,
  `Last_Name` CHAR(10) NULL ,
  PRIMARY KEY (`Emp_ID`) )
ENGINE = InnoDB
Lösung

Ich vermute, dass Clients.Case_Number und/oder Staff.Emp_ID nicht genau der gleiche Datentyp sind wie Clients_has_Staff.Clients_Case_Number und Clients_has_Staff.Staff_Emp_ID.

Vielleicht sind die Spalten in den übergeordneten Tabellen INT UNSIGNED?

Sie müssen in beiden Tabellen genau denselben Datentyp haben.

Kommentare (11)

Gründe, warum Sie einen Fremdschlüssel-Beschränkungsfehler erhalten können:

  1. Sie verwenden nicht InnoDB als Engine für alle Tabellen.
  2. Sie versuchen, auf einen nicht existierenden Schlüssel in der Zieltabelle zu verweisen. Stellen Sie sicher, dass es sich um einen Schlüssel der anderen Tabelle handelt (es kann ein Primär- oder eindeutiger Schlüssel sein).
  3. Die Spaltentypen sind nicht identisch (Ausnahme: die Spalte der referenzierenden Tabelle kann nullbar sein).
  4. Wenn der PK/FK ein varchar ist, stellen Sie sicher, dass die Sortierung für beide gleich ist.

Aktualisierung:

  1. Einer der Gründe kann auch sein, dass die Spalte, die Sie für "ON DELETE SET NULL" verwenden, nicht als Null definiert ist. Stellen Sie also sicher, dass die Spalte standardmäßig auf null gesetzt ist.

Überprüfen Sie dies.

Kommentare (12)

Ich habe den gleichen Fehler beim Versuch, eine fk hinzufügen. In meinem Fall wurde das Problem durch die PK der FK-Tabelle verursacht, die als unsigned markiert war.

Kommentare (0)