MySQL विदेशी कुंजी बाधाओं का उपयोग कैसे करें

How Use Mysql Foreign Key Constraints



MySQL डेटाबेस में दो तालिकाओं के बीच संबंध बनाने के लिए विदेशी कुंजी बाधा का उपयोग किया जाता है। संबंधित तालिकाओं पर विभिन्न प्रकार के प्रतिबंध निर्धारित करना MySQL की एक बहुत ही महत्वपूर्ण विशेषता है। किसी भी तालिका के लिए किसी भी विदेशी कुंजी बाधा को परिभाषित करने के लिए आपको किसी अन्य तालिका की प्राथमिक कुंजी का उपयोग करना होगा। प्राथमिक कुंजी तालिका में विशेष पंक्ति की पहचान करने के लिए एक अद्वितीय कुंजी है और जब इस प्राथमिक कुंजी का उपयोग किसी अन्य तालिका में एक-से-एक या एक-से-कई या कई-से-अनेक संबंध बनाने के लिए किया जाता है तो यह एक विदेशी कुंजी कहा जाता है। MySQL तालिकाओं में विदेशी कुंजियों की विशेषताएं और इन कुंजियों का उपयोग कैसे किया जा सकता है, इस आलेख में दिखाया गया है।

विदेशी प्रमुख बाधाओं की विशेषताएं:

विदेशी कुंजी बाधा की कुछ महत्वपूर्ण विशेषताओं को नीचे समझाया गया है।







  • चाइल्ड टेबल में उपयोग की जाने वाली विदेशी कुंजी का डेटा प्रकार प्राथमिक कुंजी के डेटा प्रकार के साथ समान होना चाहिए जो कि विदेशी कुंजी को संदर्भित करने के लिए मूल तालिका में उपयोग किया जाता है।
  • किसी भी इंडेक्स कॉलम या एकाधिक कॉलम को केवल InnoDB तालिका के लिए एक विदेशी कुंजी के रूप में संदर्भित किया जा सकता है।
  • विदेशी कुंजी बनाने के लिए संदर्भ विशेषाधिकार या SELECT, INSERT, UPDATE और DELETE कथनों में से कम से कम एक विशेषाधिकार की आवश्यकता होती है।
  • एक विदेशी कुंजी दो तरह से बनाई जा सकती है। एक क्रिएट स्टेटमेंट का उपयोग करके और दूसरा ALTER स्टेटमेंट का उपयोग करके।

पूर्वापेक्षा:

एक विदेशी कुंजी बाधा बनाने से पहले, आपको प्राथमिक कुंजी के साथ एक डेटाबेस और मूल तालिका बनानी होगी। मान लीजिए डेटाबेस का नाम है ' पुस्तकालय ' और इसमें 'नाम' नाम की दो पैरेंट टेबल हैं पुस्तकें ' तथा ' उधार लेने वाला '। का उपयोग कर MySQL सर्वर के साथ संबंध बनाएं माई एसक्यूएल क्लाइंट और डेटाबेस और टेबल बनाने के लिए निम्न SQL कथन चलाएँ।



सर्जन करना डेटाबेस पुस्तकालय;
उपयोग पुस्तकालय;

सर्जन करना टेबल पुस्तकें(
पहचान NS नहीं शून्य स्वत: वेतनवृद्धि ,
शीर्षक वर्कर (पचास) नहीं शून्य ,
लेखक वर्कर (पचास) नहीं शून्य ,
प्रकाशक वर्कर (पचास) नहीं शून्य ,
प्राथमिक कुंजी (पहचान)
) यन्त्र = INNODB ;

सर्जन करना टेबल उधारकर्ताओं(
पहचान वचर (पचास) नहीं शून्य ,
नाम वर्कर (पचास) नहीं शून्य ,
पता वर्कर (पचास) नहीं शून्य ,
ईमेल वर्कर (पचास) नहीं शून्य ,
प्राथमिक कुंजी (पहचान)
) यन्त्र = INNODB ;



CREATE स्टेटमेंट का उपयोग करके विदेशी कुंजी बाधा को परिभाषित करें

'नाम की एक तालिका बनाएं किताब_उधार_जानकारी 'निम्नलिखित कथन को निष्पादित करके विदेशी कुंजी बाधाओं के साथ। यहां ही Book_id क्षेत्र एक है विदेशी कुंजी इस तालिका के लिए और इस क्षेत्र के प्रत्येक मान में मौजूद होना चाहिए पहचान का क्षेत्र पुस्तकें टेबल। पुस्तकें मूल तालिका है और किताब_उधार_जानकारी बच्चे की मेज है। यहां विदेशी कुंजी के साथ दो प्रतिबंध भी लगाए गए हैं। य़े हैं कैस्केड हटाएं तथा अद्यतन कैस्केड . इसका मतलब है कि यदि कोई प्राथमिक कुंजी पैरेंट टेबल से हटा या अपडेट करेगी तो विदेशी कुंजी से संबंधित चाइल्ड टेबल से संबंधित संबंधित रिकॉर्ड हटा दिए जाएंगे या विदेशी कुंजी अपडेट हो जाएगी।





सर्जन करना टेबल किताब_उधार_जानकारी(
उधार_आईडी वचर (पचास),
Book_id NS ,
उधार_तिथि दिनांक नहीं शून्य ,
वापसी की तिथि दिनांक नहीं शून्य ,
स्थिति वचर (पंद्रह) नहीं शून्य ,
अनुक्रमणिका par_ind(Book_id),
प्राथमिक कुंजी (उधार_आईडी,उधार_तिथि),
विदेशी कुंजी (Book_id) प्रतिक्रिया दें संदर्भ पुस्तकें(पहचान)
पर हटाएँ झरना
पर अपडेट करें झरना
) यन्त्र = INNODB ;

अब, दोनों तालिकाओं में कुछ रिकॉर्ड सम्मिलित करने के लिए निम्न SQL कथन चलाएँ। पहला INSERT स्टेटमेंट चार रिकॉर्ड्स को सम्मिलित करेगा पुस्तकें टेबल। के चार मान पहचान का क्षेत्र पुस्तकें ऑटो-इन्क्रीमेंट विशेषता के लिए तालिका 1, 2, 3 और 4 होगी। दूसरा INSERT स्टेटमेंट चार रिकॉर्ड्स को सम्मिलित करेगा किताब_उधार_जानकारी पर आधारित पहचान का मूल्य पुस्तकें टेबल।



सम्मिलित करें में पुस्तकें मान
( शून्य , 'टू किल अ मॉकिंगबर्ड', 'हार्पर ली', 'ग्रैंड सेंट्रल पब्लिशिंग'),
( शून्य , 'एकांत के सौ वर्ष', 'गार्सिया मार्केज़', 'लुटफी ओज़कोक'),
( शून्य , 'ए पैसेज टू इंडिया', 'फोर्स्टर, ईएम', 'बीबीसी हल्टन पिक्चर लाइब्रेरी'),
( शून्य , 'अदृश्य आदमी', 'राल्फ एलिसन', 'एनसाइक्लोपीडिया ब्रिटानिका, इंक.');

सम्मिलित करें में किताब_उधार_जानकारी मान
('123490', 1, '2020-02-15', '2020-02-25', 'लौटा हुआ'),
('157643', 2, '2020-03-31', '2020-03-10', 'लंबित'),
('174562', 4, '2020-04-04', '2020-04-24', 'उधार'),
('146788', 3, '2020-04-10', '2020-01-20', 'उधार');

यदि आप चाइल्ड टेबल के विदेशी कुंजी फ़ील्ड में एक मान सम्मिलित करने का प्रयास करते हैं जो मूल तालिका के प्राथमिक कुंजी फ़ील्ड में मौजूद नहीं है तो MySQL एक त्रुटि उत्पन्न करेगा। निम्न SQL कथन एक त्रुटि उत्पन्न करेगा क्योंकि मूल तालिका, पुस्तकें इसमें कोई आईडी मान नहीं है 10 .

सम्मिलित करें में किताब_उधार_जानकारी मान
('195684', 10, '2020-04-15', '2020-04-30', 'लौटा हुआ');

निम्नलिखित DELETE स्टेटमेंट को निष्पादित करने के बाद, चौथा रिकॉर्ड कब से हटा दिया जाएगा पुस्तकें तालिका तो संबंधित रिकॉर्ड से किताब_उधार_जानकारी तालिका विदेशी कुंजी बाधा के लिए स्वचालित रूप से हटा दी जाएगी।

हटाएँ से पुस्तकें कहां पहचान= 4;
चुनते हैं * से पुस्तकें;
चुनते हैं * से किताब_उधार_जानकारी;

ALTER स्टेटमेंट का उपयोग करके विदेशी कुंजी बाधा को परिभाषित करें

सबसे पहले, इसमें कुछ रिकॉर्ड डालें उधारकर्ताओं तालिका और इस तालिका को अगले में मूल तालिका के रूप में परिभाषित किया जाएगा उम्र बयान।

सम्मिलित करें में उधारकर्ताओं मान
('123490', 'पैट्रिक वुड', '34 वेस्ट स्ट्रीट लैंकेस्टर LA14 9ZH', ' [ईमेल संरक्षित]'),
('157643', 'एजरा मार्टिन', '10 द ग्रोव बर्मिंघम B98 1EU', ' [ईमेल संरक्षित]'),
('174562', 'जॉन इन्स आर्ची', '55 मेन रोड लिवरपूल एल२ 3ओडी', ' [ईमेल संरक्षित]'),
('146788', 'फ्रेडरिक हैन्सन', '85 हाईफील्ड रोड श्रुस्बरी SY46 3ME', ' [ईमेल संरक्षित]');

निम्नलिखित चलाएँ उम्र एक और विदेशी कुंजी बाधा सेट करने के लिए बयान किताब_उधार_जानकारी तालिका के साथ संबंध बनाने के लिए उधारकर्ताओं टेबल। यहां, उधार_आईडी के लिए एक विदेशी कुंजी के रूप में परिभाषित किया गया है किताब_उधार_जानकारी टेबल।

ALTER TABLE book_brow_info CONSTRAINT जोड़ें fk_brower
विदेशी कुंजी(उधार_आईडी)संदर्भ उधारकर्ता(पहचान)अद्यतन प्रतिबंध पर कैस्केड हटाएं;

अब, इसमें एक रिकॉर्ड डालें किताब_उधार_जानकारी मान्य के साथ उधार_आईडी मूल्य जो मौजूद है पहचान का क्षेत्र उधारकर्ताओं टेबल। १५७६४३ मूल्य उधारकर्ता तालिका में मौजूद है और निम्नलिखित INSERT विवरण को सफलतापूर्वक निष्पादित किया जाएगा।

सम्मिलित करें में किताब_उधार_जानकारी मान
('157643', 1, '2020-03-10', '2020-03-20', 'लौटा हुआ');

निम्नलिखित INSERT कथन एक त्रुटि संदेश उत्पन्न करेगा क्योंकि आईडी मान १९५६८० उधारकर्ता तालिका में मौजूद नहीं है।

सम्मिलित करें में किताब_उधार_जानकारी मान
('195680', 1, '2020-04-15', '2020-04-30', 'लौटा हुआ');

निष्कर्ष:

संबंधपरक डेटाबेस बनाने और तालिकाओं के बीच डेटा को उचित रूप से प्रबंधित करने के लिए विदेशी कुंजी बाधाओं को ठीक से परिभाषित करना एक बहुत ही महत्वपूर्ण कार्य है। डेटाबेस डिजाइनरों के लिए विदेशी कुंजी बाधाओं के उपयोग को जानना बहुत आवश्यक है। मुझे उम्मीद है कि यह लेख नए डेटाबेस डिजाइनरों को विदेशी कुंजी बाधाओं की अवधारणा को समझने और उन्हें अपने कार्यों में ठीक से लागू करने में मदद करेगा।