sql >> Databáze >  >> RDS >> Mysql

Chyba SQL (1215):Nelze přidat omezení cizího klíče

Níže uvedené selže, protože řazení je jiné. Proč to ukazuji? Protože OP to neudělal.

Poznámka:Zmenšil jsem velikost kvůli chybě 1071 při dimenzování pro varchar 255 s tímto řazením a poté automaticky zvolenou znakovou sadou.

Jde o to, že pokud je řazení jiné, nebude to fungovat.

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;

Výše uvedené selhání je na úrovni tabulky. Záludnější způsob, který způsobuje chybu 1215 kvůli neshodám řazení na úrovni sloupců, si můžete prohlédnout v této odpovědi .

Přetažení diskuse k obecnějším případům ...

zda se pokoušíte vytvořit omezení cizího klíče při vytváření tabulky nebo pomocí ALTER TABLE."

jako například

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

platí následující.

Z manuálové stránky MySQL s názvem Using FOREIGN KEY Omezení :

Kromě toho odkaz (nadřazená) tabulka musí mít k dispozici klíč zcela vlevo pro rychlé vyhledání (ověření). Tento nadřazený klíč nemusí být PRIMARY nebo dokonce UNIQUE . Tento koncept je popsán ve 2. části níže. První část odkazuje na Pomocníka index, který bude v případě potřeby vytvořen v odkazování (dětský) stůl, je-li to nutné.



  1. Jak vytvořit novou databázi MySQL pomocí go-sql-driver

  2. SQL Server:maximální počet řádků v tabulce

  3. INSERT a SELECT GROUP BY:více cílových sloupců než výrazů chyba

  4. Jak povolit všechna omezení CHECK a cizích klíčů v databázi na serveru SQL (příklady T-SQL)