Mysql
 sql >> Base de données >  >> RDS >> Mysql

SQL ne peut pas créer de table (errno :150)

Vous devez créer une contrainte de clé étrangère référençant le full clé primaire ou unique de chaque table référencée. Vous ne pouvez pas créer de clés étrangères distinctes pour des colonnes individuelles au milieu de la clé primaire de la table de références.

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

J'ai utilisé le mot devrait ci-dessus car InnoDB est en fait un peu plus indulgent que la norme ANSI/ISO SQL en ce qui concerne les clés étrangères. Le SQL standard indique que les colonnes de la clé étrangère doivent être la liste complète des colonnes de la clé primaire ou unique référencée.

InnoDB vous permet d'utiliser un sous-ensemble de colonnes, tant qu'il s'agit d'un préfixe gauche de ces colonnes. Mais vous ne devriez pas faire cela, car vous obtenez des résultats vraiment déroutants lorsqu'une ligne enfant peut référencer multiple lignes dans sa table parent.