Anda harus membuat satu batasan kunci asing yang merujuk pada penuh kunci utama atau unik dari setiap tabel yang direferensikan. Anda tidak dapat membuat kunci asing terpisah untuk masing-masing kolom di tengah kunci utama tabel referensi.
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)
);
Saya menggunakan kata harus di atas karena InnoDB sebenarnya sedikit lebih lunak daripada standar ANSI/ISO SQL dalam hal kunci asing. SQL standar mengatakan kolom kunci asing harus menjadi daftar lengkap kolom dari kunci utama atau kunci unik yang direferensikan.
InnoDB mengizinkan Anda untuk menggunakan subset kolom, selama itu adalah awalan kiri dari kolom tersebut. Tetapi Anda tidak boleh melakukan itu, karena Anda mendapatkan hasil yang sangat membingungkan ketika baris anak dapat mereferensikan banyak baris dalam tabel induknya.