Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur SQL (1215) :Impossible d'ajouter une contrainte de clé étrangère

Ce qui suit échouera car le classement est différent. Pourquoi est-ce que je montre ça ? Parce que l'OP ne l'a pas fait.

Notez que j'ai réduit la taille en raison de l'erreur 1071 lors du dimensionnement pour varchar 255 avec ce classement, puis le jeu de caractères choisi automatiquement.

Le fait est que si le classement est différent, cela ne fonctionnera pas.

CREATE TABLE `user_details` (
    `ClientID` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`ClientID`)
)ENGINE=InnoDB;

CREATE TABLE `profilePic` (
    `ClientID` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`ClientID`),
    CONSTRAINT `FK__user_details` FOREIGN KEY (`ClientID`) REFERENCES `user_details` (`ClientID`) ON UPDATE CASCADE ON DELETE CASCADE
)COLLATE='utf8mb4_unicode_ci' ENGINE=InnoDB;

L'échec ci-dessus se situe au niveau de la table. Une erreur plus délicate provoquant une erreur 1215 en raison d'incompatibilités de classement au niveau des colonnes peut être vue dans cette réponse .

Tirer la discussion vers des cas plus généraux...

si vous essayez d'établir une contrainte de clé étrangère sur la création de table ou avec ALTER TABLE

comme

ALTER TABLE `facility` ADD CONSTRAINT `fkZipcode` 
     FOREIGN KEY (`zipcode`) REFERENCES `allzips`(`zipcode`);

ce qui suit s'appliquera.

À partir de la page de manuel de MySQL intitulée Utilisation de FOREIGN KEY Contraintes :

De plus, le référencé La table (parente) doit avoir une clé la plus à gauche disponible pour une recherche rapide (vérification). Cette clé parent n'a pas besoin d'être PRIMARY ou encore UNIQUE . Ce concept est décrit dans le 2e morceau ci-dessous. Le premier morceau fait allusion à un Helper index qui sera créé si nécessaire dans le référencement table (enfant) si nécessaire.