Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Erro de SQL (1215):não é possível adicionar restrição de chave estrangeira


O abaixo falhará porque o agrupamento é diferente. Por que eu mostro isso? Porque o OP não.

Observe que reduzi o tamanho devido ao erro 1071 no dimensionamento do varchar 255 com esse agrupamento e, em seguida, o conjunto de caracteres escolhido automaticamente.

O ponto é que, se o agrupamento for diferente, não 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;

A falha acima está no nível da tabela. Um mais complicado, causando um erro 1215 devido a incompatibilidades de agrupamento no nível da coluna, pode ser visto nesta resposta .

Puxando a discussão para casos mais gerais...

se você está tentando estabelecer uma restrição de chave estrangeira na criação da tabela ou com ALTER TABLE

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

aplicar-se-á o seguinte.

Da página de manual do MySQL intitulada Usando FOREIGN KEY Restrições :

Além disso, o referenciado (pai) deve ter uma chave mais à esquerda disponível para pesquisa rápida (verificação). Essa chave pai não precisa ser PRIMARY ou mesmo UNIQUE . Este conceito é descrito no segundo bloco abaixo. A primeira parte alude a um Ajudante índice que será criado se necessário no referenciamento (criança) mesa, se necessário.