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.