Mysql
 sql >> Datenbank >  >> RDS >> Mysql

SQL-Fehler (1215):Fremdschlüsselbeschränkung kann nicht hinzugefügt werden

Das Folgende schlägt fehl, da die Sortierung anders ist. Warum zeige ich das? Weil das OP es nicht getan hat.

Beachten Sie, dass ich die Größe aufgrund von Fehler 1071 bei der Größenanpassung für Varchar 255 mit dieser Sortierung und dann automatisch ausgewähltem Zeichensatz verkleinert habe.

Der Punkt ist, wenn die Sortierung anders ist, wird es nicht funktionieren.

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;

Der obige Fehler liegt auf Tabellenebene. Ein kniffligerer Fehler, der einen 1215-Fehler aufgrund von Sortierungskonflikten auf Spaltenebene verursacht, ist in dieser Antwort zu sehen .

Die Diskussion auf allgemeinere Fälle hochziehen ...

ob Sie versuchen, eine Fremdschlüssel-Einschränkung für die Tabellenerstellung einzurichten oder mit ALTER TABLE

wie

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

Folgendes gilt.

Von der MySQL-Manpage mit dem Titel Using FOREIGN KEY Einschränkungen :

Außerdem wird die referenzierte (Eltern-)Tabelle muss einen Schlüssel ganz links haben, der für eine schnelle Suche (Verifizierung) verfügbar ist. Dieser übergeordnete Schlüssel muss nicht PRIMARY sein oder sogar UNIQUE . Dieses Konzept wird im 2. Abschnitt weiter unten beschrieben. Der erste Chunk spielt auf einen Helfer an Index, der ggf. bei der Referenzierung angelegt wird (untergeordnete) Tabelle, falls erforderlich.