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

SQL kann Tabelle nicht erstellen (Fehlernummer:150)

Sie sollten eine Fremdschlüsseleinschränkung erstellen, die auf full verweist Primärschlüssel oder eindeutiger Schlüssel jeder referenzierten Tabelle. Sie können keine separaten Fremdschlüssel für einzelne Spalten in der Mitte des Primärschlüssels der Referenztabelle erstellen.

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)
);

Ich habe das Wort sollte verwendet oben, weil InnoDB tatsächlich etwas nachsichtiger ist als der ANSI/ISO-SQL-Standard, wenn es um Fremdschlüssel geht. Standard-SQL sagt, dass die Spalten des Fremdschlüssels müssen die vollständige Liste der Spalten des referenzierten Primärschlüssels oder eindeutigen Schlüssels sein.

InnoDB erlaubt Ihnen, eine Teilmenge von Spalten zu verwenden, solange sie ein linkes Präfix dieser Spalten sind. Aber das sollten Sie nicht tun, da Sie wirklich verwirrende Ergebnisse erhalten, wenn eine untergeordnete Zeile auf multiple verweisen kann Zeilen in der übergeordneten Tabelle.