sql >> Databasteknik >  >> RDS >> Mysql

SQL Kan inte skapa tabell (errnr:150)

Du bör göra en begränsning av främmande nyckel som refererar till fullständig primär eller unik nyckel för varje refererad tabell. Du kan inte skapa separata främmande nycklar till enskilda kolumner i mitten av referenstabellens primärnyckel.

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

Jag använde ordet bör ovan eftersom InnoDB faktiskt är lite mildare än ANSI/ISO SQL-standarden när det kommer till främmande nycklar. Standard SQL säger att kolumnerna i den främmande nyckeln måste vara den fullständiga listan över kolumner för den refererade primära eller unika nyckeln.

InnoDB tillåter dig att använda en delmängd av kolumner, så länge de är ett vänsterprefix av dessa kolumner. Men du bör inte göra det, eftersom du får riktigt förvirrande resultat när en underordnad rad kan referera till flera rader i dess överordnade tabell.



  1. beställa efter... siffror? Hjälp mig sortera ip-adresser

  2. Splitting Strings:Nu med mindre T-SQL

  3. SQLiteOpenHelper:metoden onCreate() anropas inte på fysisk enhet

  4. Vad är Multi Dimension OLAP CUBE och ge exempel på kub med mer än 3 dimensioner