आपको पूर्ण . के संदर्भ में एक विदेशी कुंजी बाधा बनानी चाहिए प्रत्येक संदर्भित तालिका की प्राथमिक या अद्वितीय कुंजी। आप संदर्भ तालिका की प्राथमिक कुंजी के बीच में अलग-अलग स्तंभों के लिए अलग-अलग विदेशी कुंजियाँ नहीं बना सकते।
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)
);
मैंने चाहिए . शब्द का इस्तेमाल किया है ऊपर क्योंकि InnoDB वास्तव में ANSI/ISO SQL मानक की तुलना में थोड़ा अधिक उदार है जब यह विदेशी कुंजी की बात आती है। मानक एसक्यूएल कहता है कि विदेशी कुंजी के कॉलम जरूरी संदर्भित प्राथमिक या अद्वितीय कुंजी के स्तंभों की पूरी सूची हो।
InnoDB आपको कॉलम के सबसेट का उपयोग करने की अनुमति देता है, जब तक कि वे उन कॉलम के बाएं-उपसर्ग हैं। लेकिन आपको ऐसा नहीं करना चाहिए, क्योंकि जब कोई चाइल्ड पंक्ति एकाधिक का संदर्भ दे सकती है तो आपको वास्तव में भ्रमित करने वाले परिणाम मिलते हैं इसकी मूल तालिका में पंक्तियाँ।