sql >> Databasteknik >  >> RDS >> Mysql

SQL-fel (1215):Det går inte att lägga till begränsning av främmande nyckel

Nedanstående kommer att misslyckas eftersom sorteringen är annorlunda. Varför visar jag detta? Eftersom OP inte gjorde det.

Notera att jag krympte storleken på grund av fel 1071 vid dimensionering för varchar 255 med den sorteringen och sedan automatiskt vald teckenuppsättning.

Poängen är att om sorteringen är annorlunda kommer den inte att fungera.

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;

Ovanstående misslyckande är på tabellnivå. En knepigare som orsakar ett 1215-fel på grund av oöverensstämmelse i kolumnnivå kan ses i det här svaret .

Drar diskussionen upp till mer allmänna fall ...

oavsett om du försöker skapa en utländsk nyckel-begränsning vid skapandet av tabeller eller med ALTER TABLE

som

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

följande kommer att gälla.

Från MySQL-manualsidan med titeln Using FOREIGN KEY Begränsningar :

Dessutom är referens (förälder) tabell måste ha en nyckel längst till vänster tillgänglig för snabb uppslagning (verifiering). Den överordnade nyckeln behöver inte vara PRIMARY eller till och med UNIQUE . Detta koncept beskrivs i den andra delen nedan. Den första delen anspelar på en Hjälpare index som kommer att skapas vid behov i referensen (underordnat) bord om det behövs.



  1. Enkelt sätt att välja höger kolumn som primärnyckel för en given tabell

  2. Uppdatera SQL Server-tabeller med färre avbrott med hjälp av partitionsväxling

  3. Hur man upptäcker och förhindrar oväntad tillväxt av SQL Server-databasen TempDB

  4. angivna formulärdata sparas inte i mysql db?