Mysql
 sql >> база данни >  >> RDS >> Mysql

SQL грешка (1215):Не може да се добави ограничение за външен ключ

По-долу ще се провали, защото съпоставянето е различно. Защо показвам това? Защото ОП не го направи.

Забележка. Намалих размера поради грешка 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-ра част по-долу. Първата част намеква за Помощник индекс, който ще бъде създаден, ако е необходимо в препратката (детска) таблица, ако е необходимо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се зареди com.mysql.jdbc.Driver

  2. Не мога да задам low_case_table_names в MySQL 8.x на Windows 10

  3. Най-добра практика за съхраняване на тегла в SQL база данни?

  4. Вмъкване в select и актуализиране в една заявка

  5. Как да съкратим таблица с помощта на Doctrine?