sql >> Database teknologi >  >> RDS >> Mysql

SQL kan ikke oprette tabel (fejlnr:150)

Du bør lave en fremmednøglebegrænsning, der refererer til den fulde primær eller unik nøgle for hver refereret tabel. Du kan ikke lave separate fremmednøgler til individuelle kolonner i midten af ​​referencetabellens primære nøgle.

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

Jeg brugte ordet bør ovenfor, fordi InnoDB faktisk er en smule mere skånsom end ANSI/ISO SQL-standarden, når det kommer til fremmednøgler. Standard SQL siger, at kolonnerne i fremmednøglen skal være den fulde liste over kolonner i den refererede primære eller unikke nøgle.

InnoDB tillader dig at bruge et undersæt af kolonner, så længe de er et venstrepræfiks for disse kolonner. Men du bør ikke gøre det, for du får virkelig forvirrende resultater, når en underordnet række kan referere til flere rækker i dens overordnede tabel.



  1. Hvad er den bedste måde at gemme mediefiler på en database?

  2. SQL-opdatering fra tabel med tilfældige navne

  3. Henvis til en tabel i et andet skema og udelad skemanavn

  4. Find forælder rekursivt ved hjælp af Query