J'essaie de transférer mon nouveau schéma sur mon serveur de données, mais je n'arrive pas à comprendre pourquoi j'obtiens cette erreur. J'ai essayé de chercher la réponse ici, mais tout ce que j'ai trouvé m'a dit soit de définir le moteur de base de données sur Innodb, soit de m'assurer que les clés que j'essaie d'utiliser comme clé étrangère sont des clés primaires dans leurs propres tables. J'ai fait ces deux choses, si je ne me trompe pas. Avez-vous une autre aide à proposer ?
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
L'exécution du script SQL est terminée : déclarations : 7 ont réussi, 1 a échoué
Voici le SQL pour les tables parentes.
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
Je suppose que Clients.Case_Number
et/ou Staff.Emp_ID
ne sont pas exactement le même type de données que Clients_has_Staff.Clients_Case_Number
et Clients_has_Staff.Staff_Emp_ID
.
Peut-être que les colonnes des tables parentes sont des INT UNSIGNED
?
Elles doivent avoir exactement le même type de données dans les deux tables.
Les raisons pour lesquelles vous pouvez obtenir une erreur de contrainte de clé étrangère :
Mise à jour:
ON DELETE SET NULL
n'est pas définie pour être nulle. Assurez-vous donc que la colonne est définie comme nulle par défaut.Vérifiez ces éléments.