Database
 sql >> डेटाबेस >  >> RDS >> Database

SQL में एक विदेशी कुंजी के साथ एक टेबल कैसे बनाएं

समस्या:

आप किसी डेटाबेस में किसी तालिका के लिए एक विदेशी कुंजी बनाना चाहते हैं।

उदाहरण:

हम 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 . नाम दिया गया है . यदि आप बाधा नाम निर्दिष्ट नहीं करते हैं, तो डेटाबेस एक डिफ़ॉल्ट बाधा नाम उत्पन्न करता है (जो डेटाबेस द्वारा भिन्न होगा)।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एक बहुत बड़ी मेज पर (कॉलमस्टोर) संपीड़न के साथ मज़ा - भाग 3

  2. शीर्ष 18 मुक्त और व्यापक रूप से उपयोग किए जाने वाले, ओपन सोर्स नोएसक्यूएल डेटाबेस

  3. RANK, DENSE_RANK और ROW_NUMBER फ़ंक्शंस के बीच समानताएं और अंतर

  4. टेस्ट-ड्रिवेन डाटाबेस डेवलपमेंट (टीडीडीडी) शुरू करने के लिए कूदें

  5. SQL FLOAT:3 बिंदु जो आपको अजीब गणित त्रुटियों से बचने में मदद करेंगे