sql >> Database teknologi >  >> RDS >> Mysql

SQL-fejl (1215):Kan ikke tilføje en begrænsning af en fremmednøgle

Nedenstående vil mislykkes, fordi sorteringen er anderledes. Hvorfor viser jeg dette? Fordi OP gjorde det ikke.

Bemærk, at jeg har formindsket størrelsen på grund af fejl 1071 i dimensionering for varchar 255 med den sortering og derefter automatisk valgt tegnsæt.

Pointen er, at hvis sortering er anderledes, vil det ikke fungere.

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;

Ovenstående fejl er på tabelniveau. En vanskeligere en, der forårsager en 1215-fejl på grund af uoverensstemmelser i kolonneniveau, kan ses i dette svar .

Trækker diskussionen op til mere generelle sager ...

uanset om du forsøger at etablere en Foreign Key-begrænsning ved tabeloprettelse eller med ALTER TABLE

såsom

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

følgende vil gælde.

Fra MySQL-manualsiden med titlen Brug af UDENLANDSKE NØGLE Begrænsninger :

Derudover er den henviste (overordnet) tabel skal have en nøgle længst til venstre tilgængelig for hurtigt opslag (bekræftelse). Den overordnede nøgle behøver ikke at være PRIMARY eller endda UNIQUE . Dette koncept er beskrevet i 2. del nedenfor. Den første del hentyder til en Hjælper indeks, der vil blive oprettet om nødvendigt i henvisningen (underordnet) bord, hvis det er nødvendigt.



  1. PostgreSQL multi INSERT...RETURNERER med flere kolonner

  2. Endnu en grund til at undgå sp_updatestats

  3. Hvordan får man et heltal fra MySQL som heltal i PHP?

  4. oracle -- Opdel flere kommaseparerede værdier i oracle-tabellen til flere rækker