वास्तव में FOREIGN KEY एक कॉलम या कॉलम का संयोजन है जिसका उपयोग दो टेबल में डेटा के बीच एक लिंक सेट करने के लिए किया जा सकता है। दूसरे शब्दों में, हम कह सकते हैं कि विदेशी कुंजी बाधा दो तालिकाओं से संबंधित है। इसका उपयोग डेटा अखंडता को बढ़ाने के लिए भी किया जाता है क्योंकि किसी तालिका की प्राथमिक कुंजी अन्य तालिकाओं की विदेशी कुंजी से जुड़ी होती है।
सिंटैक्स
FOREIGN KEY [column_name] REFERENCES [table having Primary Key] ([column_name]);
यहाँ संदर्भ एक खोजशब्द है; column_name उन स्तंभों की सूची है जिन पर FOREIGN KEY सेट की जानी है; प्राथमिक कुंजी वाली तालिका उस तालिका का नाम है जिसमें प्राथमिक कुंजी होती है; column_name उन स्तंभों की सूची है जिन पर PRIMARY KEY ने सेट किया है।
उदाहरण
मान लीजिए कि हमारे पास दो टेबल 'ग्राहक' और 'ऑर्डर' हैं। दोनों तालिकाओं के बीच संबंध 'Cust_Id' फ़ील्ड द्वारा निर्दिष्ट तालिका 'ऑर्डर' में एक विदेशी कुंजी द्वारा स्थापित किया जा सकता है। दोनों टेबल बनाने की क्वेरी इस प्रकार है -
mysql> Create Table Customer(Cust_ID int Primary Key, First_name Varchar(20), Last_name Varchar(20), City Varchar(10)); Query OK, 0 rows affected (0.13 sec) mysql> Create Table Orders(Order_Id Int Primary Key, Product_Name Varchar(25), Orderdate DATE, Cust_ID Int, FOREIGN KEY(Cust_ID) REFERENCES Customer(Cust_id)); Query OK, 0 rows affected (0.13 sec) mysql> Describe Orders; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | Order_Id | int(11) | NO | PRI | NULL | | | Product_Name | varchar(25) | YES | | NULL | | | Orderdate | date | YES | | NULL | | | Cust_ID | int(11) | YES | MUL | NULL | | +--------------+-------------+------+-----+---------+-------+ 4 rows in set (0.04 sec)
यहां, तालिका 'ग्राहक' को मूल तालिका या संदर्भित तालिका कहा जाता है और तालिका 'आदेश' को चाइल्ड टेबल या संदर्भ तालिका कहा जाता है। चाइल्ड टेबल की एक पंक्ति में वे मान होने चाहिए जो पैरेंट टेबल में मौजूद हों। उदाहरण के लिए, तालिका 'आदेश' की प्रत्येक पंक्ति में एक 'Cust_Id' होना चाहिए जो 'ग्राहक' तालिका में मौजूद हो।