Debe crear una restricción de clave externa que haga referencia al completo clave primaria o única de cada tabla referenciada. No puede crear claves externas separadas para columnas individuales en el medio de la clave principal de la tabla de referencias.
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)
);
Usé la palabra debería anterior porque InnoDB es en realidad un poco más indulgente que el estándar ANSI/ISO SQL cuando se trata de claves foráneas. SQL estándar dice que las columnas de la clave externa deben ser la lista completa de columnas de la clave primaria o única a la que se hace referencia.
InnoDB le permite usar un subconjunto de columnas, siempre que sean un prefijo izquierdo de esas columnas. Pero no debería hacer eso, porque obtiene resultados realmente confusos cuando una fila secundaria puede hacer referencia a múltiples filas en su tabla principal.