sql >> Database >  >> RDS >> Mysql

SQL-fout (1215):kan geen beperking voor externe sleutels toevoegen

Het onderstaande zal mislukken omdat de sortering anders is. Waarom laat ik dit zien? Omdat de OP dat niet deed.

Opmerking Ik heb de grootte verkleind vanwege fout 1071 bij de dimensionering voor varchar 255 met die sortering en vervolgens automatisch gekozen tekenset.

Het punt is dat als de sortering anders is, het niet werkt.

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;

De bovenstaande storing is op tafelniveau. Een lastigere fout die een 1215-fout veroorzaakt als gevolg van niet-overeenkomende sorteringen op kolomniveau is te zien in dit antwoord .

De discussie naar meer algemene gevallen trekken ...

of u nu een beperking voor een externe sleutel probeert vast te stellen voor het maken van tabellen of met ALTER TABLE

zoals

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

het volgende is van toepassing.

Van de MySQL-handleiding met de titel BUITENLANDSE SLEUTEL gebruiken Beperkingen :

Bovendien, de verwezen (ouder)tabel moet een uiterst linkse sleutel beschikbaar hebben voor snel opzoeken (verificatie). Die oudersleutel hoeft niet PRIMARY te zijn of zelfs UNIQUE . Dit concept wordt beschreven in het 2e deel hieronder. Het eerste stuk verwijst naar een Helper index die indien nodig wordt aangemaakt in de verwijzingen (kinder)tafel indien nodig.



  1. Hoe MySQL-databases weergeven op een PHP-script?

  2. 5 manieren om te controleren of een tabel bestaat in PostgreSQL

  3. gcc zal MySQL C-bibliotheken niet compileren en uitvoeren

  4. Hoe tabellen te maken met een N:M-relatie in MySQL?