MySQL में Key, Primary Key, Unique Key और Index में अंतर है


250

मैं का उपयोग करना चाहिए जब KEY, PRIMARY KEY, UNIQUE KEYऔर INDEX?


2
प्राथमिक कुंजी पंक्तियों की पहचान के लिए है, एक ही समान डेटा वाली दो पंक्तियों को सम्मिलित करने से रोकें ... खोज को तेज करने के लिए INDEX कुंजी है (प्रविष्टि में न्यूनतम धीमी गति)। एक कॉलम में अद्वितीय डेटा के लिए अद्वितीय कुंजी।
होज मर्करी


जवाबों:


303

KEYऔर INDEXMySQL में पर्यायवाची हैं। उनका मतलब एक ही है। डेटाबेस में आप डेटा पुनर्प्राप्ति की गति में सुधार करने के लिए अनुक्रमित का उपयोग करेंगे । एक सूचकांक आम तौर पर में उपयोग किया जाता स्तंभों पर बनाई गई है JOIN, WHEREऔर ORDER BYखंड।

कल्पना कीजिए कि आपके पास एक टेबल है usersऔर आप उन सभी उपयोगकर्ताओं की खोज करना चाहते हैं जिनका अंतिम नाम 'स्मिथ' है। इंडेक्स के बिना, डेटाबेस को तालिका के सभी रिकॉर्डों से गुजरना होगा: यह धीमा है, क्योंकि आपके डेटाबेस में जितने अधिक रिकॉर्ड होंगे, परिणाम को खोजने के लिए उतना ही अधिक काम करना होगा। दूसरी ओर, एक सूचकांक डेटाबेस को उन प्रासंगिक पृष्ठों पर तेज़ी से छोड़ने में मदद करेगा जहाँ 'स्मिथ' रिकॉर्ड हैं। यह बहुत समान है कि हम, मनुष्य, अंतिम नाम से किसी को खोजने के लिए एक फोन बुक निर्देशिका के माध्यम से कैसे जाते हैं: हम कवर से कवर तक की निर्देशिका के माध्यम से खोज शुरू नहीं करते हैं, जब तक कि हम किसी क्रम में जानकारी सम्मिलित करते हैं जो हम कर सकते हैं 'S' पेजों को जल्दी से छोड़ने के लिए उपयोग करें।

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

यह भी ध्यान दें कि प्राथमिक कुंजियों या विशिष्ट कुंजियों के रूप में परिभाषित कॉलम स्वचालित रूप से MySQL में अनुक्रमित होते हैं।


2
क्या मेरे पास समान मूल्य के साथ एक अद्वितीय कुंजी और प्राथमिक कुंजी दोनों हो सकती हैं?
मदद

58
@needHELP: यदि आपके पास passengersनिम्नलिखित फ़ील्ड के साथ एक तालिका है (id, first_name, last_name, age, passport_number), तो : आप सामान्य रूप idसे प्राथमिक कुंजी होने के लिए कॉलम सेट करेंगे । एक प्राथमिक कुंजी स्वचालित रूप से एक अद्वितीय कुंजी है। मुख्य अंतर यह है कि आपके पास मेज पर केवल एक प्राथमिक कुंजी हो सकती है, और यह कि कॉलम में NULLमान नहीं हो सकते । स्थापित करने के लिए कोई जरूरत नहीं है idहोना करने के लिए स्तंभ UNIQUEक्योंकि एक प्राथमिक कुंजी के लिए यह निर्धारित करके, यह स्वतः ही अद्वितीय होने की गारंटी है ... तो फिर तुम भी सेट कर सकते हैं passport_numberकरने के लिए UNIQUEइतना है कि कोई एक से अधिक यात्री ...
डैनियल वसालो

32
... वही पासपोर्ट नंबर ले सकेगा। हालांकि आपके पास पासपोर्ट संख्या के बिना कुछ यात्री (उदाहरण के लिए बच्चे) हो सकते हैं। उस स्थिति में, आप NULLउस कॉलम में, बिना किसी समस्या के सम्मिलित कर सकते हैं ।
डैनियल वेसलो

2
@DanielVassallo मैं जिस तरह से आप इसे MySQL द्वारा उपयोग किए गए समानार्थक शब्द के बीच स्पष्ट करते हैं।
SIFE

1
सबसे अच्छा स्पष्टीकरण में से एक। बहुत बहुत धन्यवाद :-)
रवि हिरानी

61

KEY और INDEX पर्यायवाची हैं।

जब प्रदर्शन माप और EXPLAIN आपको दिखाता है कि सूचकांक को जोड़ना चाहिए, तो एक लापता सूचकांक के कारण क्वेरी अक्षम है। एक इंडेक्स जोड़ने से प्रश्नों का प्रदर्शन बेहतर हो सकता है (लेकिन यह तालिका में संशोधनों को धीमा कर सकता है)।

जब आप उस स्तंभ (या स्तंभ) के मानों को अद्वितीय बनाने के लिए उपयोग करना चाहते हैं, तो आपको UNIQUE का उपयोग करना चाहिए, ताकि डुप्लिकेट मानों को सम्मिलित करने के प्रयास में कोई त्रुटि आए।

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


प्रत्येक पंक्ति को एक पहचान देने के लिए PRIMARY KEY का उपयोग किया जाता है? मेरी अज्ञानता के लिए खेद व्यक्त करें।
हेल्प

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

48

प्राथमिक कुंजीNULL मूल्यों की अनुमति नहीं देती है, लेकिन अद्वितीय कुंजीNULL मूल्यों की अनुमति देती है।

हम एक तालिका में केवल एक प्राथमिक कुंजी की घोषणा कर सकते हैं , लेकिन एक तालिका में कई अद्वितीय कुंजी (कॉलम असाइन) हो सकती हैं।


17

PRIMARY KEYऔर UNIQUE KEYसमान हैं सिवाय इसके कि इसके अलग-अलग कार्य हैं। प्राथमिक कुंजी तालिका पंक्ति को अद्वितीय बनाती है (यानी, ठीक उसी कुंजी के साथ 2 पंक्ति नहीं हो सकती है)। आपके पास डेटाबेस तालिका में केवल 1 प्राथमिक कुंजी हो सकती है।

अद्वितीय कुंजी तालिका पंक्ति को तालिका पंक्ति में अद्वितीय बनाती है (अर्थात, कोई 2 तालिका पंक्ति का सटीक मान नहीं हो सकता है)। आपके पास 1 से अधिक अनन्य कुंजी तालिका स्तंभ हो सकते हैं (प्राथमिक कुंजी के विपरीत जिसका अर्थ है तालिका में केवल 1 तालिका स्तंभ अद्वितीय है)।

INDEXविशिष्टता भी बनाता है। MySQL (उदाहरण) अनुक्रमित स्तंभ के लिए एक अनुक्रमणिका तालिका बनाएगा। इस तरह, जब तालिका उस अनुक्रमित तालिका स्तंभ पर क्वेरी की जाती है, तो तालिका पंक्ति मान प्राप्त करना आसान होता है। नुकसान यह है कि यदि आप कई अपडेट / डिलीट / क्रिएट करते हैं, तो MySQL को इंडेक्सिंग टेबल (और यह एक प्रदर्शन अड़चन हो सकती है) को मैनेज करना होगा।

उम्मीद है की यह मदद करेगा।


इसके अलावा, UNIQUE KEYहो सकता है, NULLलेकिन PRIMARY KEYनहीं हो सकता NULL
रफय

10

यूनीक कीज़: वे कॉलम जिनमें कोई दो पंक्तियाँ समान नहीं हैं

प्राथमिक कुंजी: स्तंभों की न्यूनतम संख्या का संग्रह जो किसी तालिका में प्रत्येक पंक्ति को विशिष्ट रूप से पहचान सकता है (अर्थात प्राथमिक कुंजी वाले सभी स्तंभों में कोई दो पंक्तियाँ समान नहीं हैं)। एक तालिका में एक से अधिक प्राथमिक कुंजी हो सकती हैं। यदि कोई अद्वितीय-कुंजी मौजूद है, तो यह प्राथमिक कुंजी है (तालिका में "प्राथमिक कुंजी" नहीं)। यदि कोई अद्वितीय कुंजी मौजूद नहीं है, तो एक पंक्ति को पहचानने के लिए एक से अधिक स्तंभ मानों की आवश्यकता होगी जैसे (first_name, last_name, father_name, mother_name) में कुछ तालिकाएँ प्राथमिक कुंजी का गठन कर सकती हैं।

सूचकांक: प्रश्नों का अनुकूलन करने के लिए उपयोग किया जाता है। यदि आप कई बार किसी कॉलम के आधार पर परिणामों को खोजने या क्रमबद्ध करने जा रहे हैं। एक बाइनरी ट्री एल्गोरिथ्म के साथ उदाहरण के लिए अनुक्रमित "।


मुझे लगता है कि आपके कहने का मतलब है कि एक मेज में केवल एक पीके हो सकता है
रेज़वान फ़्लेवियस पांडा

7

प्राथमिक कुंजी - हम मेज पर एक मेज पर केवल एक प्राथमिक कुंजी रख सकते हैं और जब हम तालिका में मान दर्ज कर रहे होते हैं तो हम उस कॉलम को खाली नहीं छोड़ सकते।

अद्वितीय कुंजी - हम एक मेज पर एक से अधिक अद्वितीय कुंजी रख सकते हैं और जब हम तालिका में मान दर्ज कर रहे होते हैं तो हम उस कॉलम को खाली छोड़ सकते हैं। जब हम प्राथमिक और अद्वितीय कुंजी लागू करते हैं, तो स्तंभ अनन्य मान (समान नहीं) लेते हैं।


तालिका में केवल एक प्राथमिक कुंजी है, लेकिन अद्वितीय कुंजियाँ एक से अधिक हैं।
विकेश

6

प्राथमिक कुंजी का उपयोग विभिन्न तालिकाओं के साथ काम करने के लिए किया जाता है। यह संबंधपरक डेटाबेस की नींव है। यदि आपके पास एक पुस्तक डेटाबेस है, तो INT प्राथमिक कुंजी "आईडी" के साथ 2 टेबल - 1) किताबें और 2) लेखक बनाना बेहतर है। फिर आप लेखकों के नाम के बजाय पुस्तकों में आईडी का उपयोग करते हैं।

यदि आप बार-बार प्रविष्टियाँ नहीं करना चाहते हैं, तो अद्वितीय कुंजी का उपयोग किया जाता है। उदाहरण के लिए आपके पास अपनी पुस्तक तालिका में शीर्षक हो सकता है और यह सुनिश्चित करना चाहता है कि प्रत्येक शीर्षक के लिए केवल एक प्रविष्टि हो।


2

अद्वितीय कुंजी:

  1. एक से अधिक मूल्य शून्य हो सकते हैं।
  2. अद्वितीय कुंजी में किसी भी दो ट्यूपल के समान मूल्य नहीं हो सकते।
  3. प्राथमिक कुंजी बनाने के लिए एक या अधिक विशिष्ट कुंजियों को जोड़ा जा सकता है, लेकिन इसके विपरीत नहीं।

प्राथमिक कुंजी

  1. एक से अधिक अद्वितीय कुंजियाँ हो सकती हैं।
  2. विशिष्ट रूप से एक टुपल का प्रतिनिधित्व करता है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.