समस्या:
आप किसी डेटाबेस में किसी तालिका के लिए एक विदेशी कुंजी बनाना चाहते हैं।
उदाहरण:
हम student
जिसमें एक विदेशी कुंजी होती है जो id
. को संदर्भित करती है तालिका में कॉलम city
।
समाधान 1 (नई तालिका):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT FOREIGN KEY REFERENCES city(id) );
चर्चा:
एक विदेशी कुंजी कॉलम वाली एक नई तालिका बनाने के लिए जो किसी अन्य तालिका को संदर्भित करती है, कीवर्ड का उपयोग करें FOREIGN KEY REFERENCES
उस कॉलम की परिभाषा के अंत में। संदर्भ तालिका के नाम और कोष्ठक में संदर्भित कॉलम के नाम के साथ उसका पालन करें।
हमारे उदाहरण में, हम तालिका बनाते हैं student
CREATE TABLE
का उपयोग करके खंड। हम कॉलम के नाम सूचीबद्ध करते हैं और उनके संबंधित डेटा प्रकारों को कोष्ठक में रखते हैं। कॉलम city_id
इस तालिका में विदेशी कुंजी है और कॉलम id
. में संग्रहीत आईडी के मूल्य को इंगित करता है तालिका में city
. हम FOREIGN KEY REFERENCES
लिखते हैं इस कॉलम की परिभाषा के अंत में और संदर्भित तालिका और कॉलम के साथ इसका पालन करें:city(id)
।
ध्यान रखें कि आप एक टेबल के लिए एक से अधिक विदेशी कुंजी बना सकते हैं।
समाधान 2 (नई तालिका):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, FOREIGN KEY (city_id) REFERENCES city(id) );
चर्चा:
तालिका निर्माण के दौरान विदेशी कुंजी को परिभाषित करने का दूसरा तरीका FOREIGN KEY REFERENCES
का उपयोग करना है स्तंभ परिभाषाओं के अंत में खंड। इस मामले में, FOREIGN KEY
. के बाद खंड, हम विदेशी कुंजी कॉलम को नामित करते हैं। इसके बाद आता है REFERENCES
संदर्भित तालिका और कॉलम के नाम के साथ क्लॉज।
जैसा कि नीचे दिखाया गया है, आप एक से अधिक कॉलम पर विदेशी कुंजियाँ बना सकते हैं:
समाधान 3 (नई तालिका):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, score_id INT, subject_id INT, CONSTRAINT fk_student_score_subject_id FOREIGN KEY (subject_id, score_id) REFERENCES score_subject(subject_id, score_id) );
इस उदाहरण में, बाधा fk_student_score_subject_id
एक विदेशी कुंजी है जिसमें दो कॉलम होते हैं:score_id
और subject_id
. ये दो विदेशी कुंजी स्तंभ तालिका में दो स्तंभों को संदर्भित करते हैं score_subject
- score_id
और subject_id
.
यहां एक और उदाहरण दिया गया है:
समाधान 4 (नई तालिका):
CREATE TABLE student ( id INT PRIMARY KEY, first_name VARCHAR(100) NOT NULL, last_name VARCHAR(100) NOT NULL, city_id INT, CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id) );
चर्चा:
इस कोड में, हमारे पास फिर से CONSTRAINT
. है इस बाधा के नाम के साथ खंड। ऐसे नामों का प्रयोग करें जो पढ़ने और समझने में आसान हों। हमारे उदाहरण में, हम fk_student_city_id
. नाम का उपयोग करते हैं , जो प्रासंगिक तालिका और कॉलम को इंगित करता है। इसके बाद, हम FOREIGN KEY
write लिखते हैं और विदेशी कुंजी बनने वाले कॉलम का नाम (कोष्ठक में) जोड़ें। फिर हमारे पास REFERENCES
है खंड के बाद संदर्भित तालिका और स्तंभ का नाम (यहां:id
)।
समाधान 5 (मौजूदा तालिका):
ALTER TABLE student ADD FOREIGN KEY (city_id) REFERENCES city(id);
चर्चा:
मौजूदा तालिका में एक नई विदेशी कुंजी जोड़ना भी संभव है। यहां, तालिका को ALTER TABLE
. का उपयोग करके बदल दिया गया है खंड। तालिका का नाम (हमारे उदाहरण में, student
) को ALTER TABLE
. के बाद रखा गया है खोजशब्द। इसके बाद, ADD FOREIGN KEY
क्लॉज के बाद उस कॉलम का नाम आता है जिसे फॉरेन की के रूप में इस्तेमाल किया जाएगा। फिर हमारे पास REFERENCES clause
. है संदर्भित तालिका के नाम और कोष्ठक में प्राथमिक कुंजी कॉलम के नाम के साथ।
ध्यान दें कि जिस तालिका को आप संशोधित कर रहे हैं वह इस आदेश के निष्पादित होने से पहले मौजूद होनी चाहिए।
समाधान 6 (मौजूदा तालिका, विदेशी कुंजी बाधा):
ALTER TABLE student ADD CONSTRAINT fk_student_city_id FOREIGN KEY (city_id) REFERENCES city(id)
चर्चा:
यदि आप किसी विदेशी कुंजी कॉलम को किसी मौजूदा तालिका के लिए बाधा के रूप में नाम देना चाहते हैं, तो इस तरह की क्वेरी का उपयोग करें। यहां, विदेशी कुंजी बाधा को fk_student_city_id
. नाम दिया गया है . यदि आप बाधा नाम निर्दिष्ट नहीं करते हैं, तो डेटाबेस एक डिफ़ॉल्ट बाधा नाम उत्पन्न करता है (जो डेटाबेस द्वारा भिन्न होगा)।