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

SQL nemůže vytvořit tabulku (errno:150)

Měli byste vytvořit jedno omezení cizího klíče odkazující na úplné primární nebo jedinečný klíč každé odkazované tabulky. Nemůžete vytvořit samostatné cizí klíče pro jednotlivé sloupce uprostřed primárního klíče tabulky odkazů.

CREATE TABLE prospect
(Custname      VARCHAR(25) NOT NULL,
 Carmake       VARCHAR(25) NOT NULL,
 Carmodel      VARCHAR(20) NOT NULL,
 Caryear       VARCHAR(4) NOT NULL,
 Carextcolour  VARCHAR(10) NOT NULL,
 Cartrim       VARCHAR(10) NOT NULL,
 Optioncode    CHAR(4),
 CONSTRAINT pkprospect PRIMARY KEY (Custname, Carmake, Carmodel, Caryear, Carextcolour,           Cartrim, Optioncode),
 CONSTRAINT fkprospect FOREIGN KEY (Custname) REFERENCES customer(Custname),
 CONSTRAINT fk2prospect FOREIGN KEY (Carmake, Carmodel, Caryear, Carextcolour, Cartrim)
   REFERENCES car(Carmake, Carmodel, Caryear, Carextcolour, Cartrim),
 CONSTRAINT fk7prospect FOREIGN KEY (Optioncode) REFERENCES optiontable(Optioncode)
);

Použil jsem slovo měl bych výše, protože InnoDB je ve skutečnosti o něco shovívavější než standard ANSI/ISO SQL, pokud jde o cizí klíče. Standardní SQL říká, že sloupce cizího klíče musí být úplný seznam sloupců odkazovaného primárního nebo jedinečného klíče.

InnoDB vám umožňuje používat podmnožinu sloupců, pokud jsou levou předponou těchto sloupců. Ale neměli byste to dělat, protože pokud podřízený řádek může odkazovat na více, získáte opravdu matoucí výsledky řádků v nadřazené tabulce.



  1. Výběr více sloupců/polí v poddotazu MySQL

  2. Aktualizace profilu pošty databáze v SQL Server (T-SQL)

  3. Co znamená řazení?

  4. mysqli_query() očekává alespoň 2 parametry, z nichž 1 je uveden v?