По-долу ще се провали, защото съпоставянето е различно. Защо показвам това? Защото ОП не го направи.
Забележка. Намалих размера поради грешка 1071 при оразмеряване за varchar 255 с това съпоставяне и след това автоматично избран набор от знаци.
Въпросът е, че ако съпоставянето е различно, то няма да работи.
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;
Горната грешка е на ниво таблица. По-сложна, причиняваща грешка 1215 поради несъответствия на съпоставяне на ниво колона, може да се види в този отговор .
Изтегляне на дискусията до по-общи случаи...
независимо дали се опитвате да установите ограничение за външен ключ при създаване на таблица или с ALTER TABLE
като например
ALTER TABLE `facility` ADD CONSTRAINT `fkZipcode`
FOREIGN KEY (`zipcode`) REFERENCES `allzips`(`zipcode`);
ще се прилага следното.
От страницата с ръководство за MySQL, озаглавена Използване на ВЪНШЕН КЛЮЧ Ограничения :
В допълнение, препратката (родителска) таблица трябва да има наличен най-ляв ключ за бързо търсене (проверка). Не е необходимо този родителски ключ да е PRIMARY
или дори UNIQUE
. Тази концепция е описана във 2-ра част по-долу. Първата част намеква за Помощник индекс, който ще бъде създаден, ако е необходимо в препратката (детска) таблица, ако е необходимо.