sql >> Base de Datos >  >> RDS >> Mysql

Error de SQL (1215):no se puede agregar una restricción de clave externa

Lo siguiente fallará porque la intercalación es diferente. ¿Por qué muestro esto? Porque el OP no lo hizo.

Tenga en cuenta que reduje el tamaño debido al error 1071 en el dimensionamiento de varchar 255 con esa intercalación y luego el conjunto de caracteres elegido automáticamente.

El punto es que si la intercalación es diferente, no funcionará.

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;

El error anterior está en el nivel de la tabla. Se puede ver uno más complicado que causa un error 1215 debido a discrepancias en la intercalación a nivel de columna en Esta respuesta .

Llevando la discusión a casos más generales...

ya sea que esté tratando de establecer una restricción de clave externa en la creación de tablas o con ALTER TABLE

como

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

se aplicará lo siguiente.

De la página del manual de MySQL titulada Using FOREIGN KEY Restricciones :

Además, el referenciado La tabla (principal) debe tener una clave más a la izquierda disponible para una búsqueda rápida (verificación). Esa clave principal no necesita ser PRIMARY o incluso UNIQUE . Este concepto se describe en el segundo fragmento a continuación. El primer fragmento alude a un Ayudante índice que se creará si es necesario en la referenciación (niño) mesa si es necesario.