Mysql
 sql >> Database >  >> RDS >> Mysql

Errore SQL (1215):impossibile aggiungere il vincolo di chiave esterna

Quanto segue avrà esito negativo perché le regole di confronto sono diverse. Perché lo mostro? Perché l'OP no.

Nota che ho ridotto la dimensione a causa dell'errore 1071 sul dimensionamento per varchar 255 con quella confronto e quindi il set di caratteri scelto automaticamente.

Il punto è che, se le regole di confronto sono diverse, non funzioneranno.

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'errore di cui sopra è a livello di tabella. Uno più complicato che causa un errore 1215 a causa di mancate corrispondenze di confronto a livello di colonna può essere visualizzato in questa risposta .

Tirando la discussione su casi più generali...

se stai cercando di stabilire un vincolo di chiave esterna sulla creazione della tabella o con ALTER TABLE

come

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

si applica quanto segue.

Dalla pagina di manuale di MySQL intitolata Utilizzo di FOREIGN KEY Vincoli :

Inoltre, il riferito La tabella (principale) deve avere una chiave all'estrema sinistra disponibile per la ricerca rapida (verifica). Non è necessario che la chiave genitore sia PRIMARY o anche UNIQUE . Questo concetto è descritto nel secondo pezzo di seguito. Il primo pezzo allude a un Aiutante indice che verrà creato se necessario nel riferimento (figlio) tabella se necessario.