क्या हम किसी तालिका के प्राथमिक कुंजी मान अपडेट कर सकते हैं?क्या हम किसी तालिका के प्राथमिक कुंजी मान अपडेट कर सकते हैं?
उत्तर
संक्षिप्त उत्तर: हाँ आप कर सकते हैं। बेशक आपको यह सुनिश्चित करना होगा कि नया मान किसी भी मौजूदा मूल्य से मेल नहीं खाता है और अन्य बाधाएं संतुष्ट हैं (दुह)।
आप वास्तव में क्या करने की कोशिश कर रहे हैं?
मेरा अनुमान डेटाबेस 2 में डेटाबेस 2 विलय कर देगा, जहां प्रत्येक में उपयोगकर्ता तालिका होती है, और उन 2 तालिकाओं में, समान उपयोगकर्ता नाम में एक अलग आईडी (ऑटोइनक्रिकमेंट आईडी) होती है। –
आप कर सकते हैं जब तक
रूप- मूल्य अद्वितीय है
- कोई मौजूदा विदेशी कुंजी
का उल्लंघन होता है आप कुछ निश्चित परिस्थितियों में कर सकते हैं।
लेकिन तथ्य यह है कि आप इसे मानते हैं कि यह एक मजबूत संकेत है कि आपके आर्किटेक्चर में कुछ गड़बड़ है: प्राथमिक कुंजी शुद्ध तकनीकी होनी चाहिए और किसी भी व्यवसाय का अर्थ नहीं लेना चाहिए। तो उन्हें बदलने की जरूरत कभी नहीं होनी चाहिए।
थॉमस
"प्राथमिक कुंजी शुद्ध तकनीकी होनी चाहिए और किसी भी व्यवसाय का अर्थ नहीं लेना चाहिए" - यह आपकी राय है, तथ्य नहीं। सरोगेट बनाम प्राकृतिक बहस बंद नहीं हुई है। –
जबकि मैं मानता हूं कि बहस अभी भी खुली है, यह मामला सरोगेट्स के लिए एक मजबूत तर्क है। – DCookie
यह आमतौर पर सहमति है कि primary keys should be immutable (या as stable as possible अचल स्थिति के बाद से डीबी में लागू नहीं किया जा सकता है)।
देखने के एक प्रदर्शन बिंदु से:
- आप सभी को अपडेट करने की आवश्यकता होगी जबकि वहाँ कुछ भी नहीं है कि आप एक प्राथमिक कुंजी (अखंडता बाधा को छोड़कर) को अद्यतन करने से रोकने जाएगा, यह एक अच्छा विचार नहीं हो सकता है विदेशी कुंजी जो अद्यतन कुंजी का संदर्भ देती हैं। एक अपडेट से संभावित रूप से बहुत सारी टेबल/पंक्तियों का अद्यतन हो सकता है।
- यदि विदेशी कुंजी अनदेखा हैं (!!) आपको अखंडता सुनिश्चित करने के लिए बच्चों की मेज पर लॉक बनाए रखना होगा। ओरेकल केवल थोड़े समय के लिए लॉक रखेगा लेकिन फिर भी, यह डरावना है।
- यदि आपकी विदेशी कुंजी को अनुक्रमित किया गया है (जैसा कि वे होना चाहिए), तो अपडेट इंडेक्स (इंडेक्स स्ट्रक्चर में डिलीट + डालने) के अपडेट की ओर ले जाएगा, यह आम तौर पर आधार तालिका के वास्तविक अपडेट की तुलना में अधिक महंगा है।
- ऑर्गनाइजेशन इंडेक्स टेबल (अन्य आरडीबीएमएस में, क्लस्टर प्राथमिक कुंजी देखें), पंक्तियों को प्राथमिक कुंजी द्वारा भौतिक रूप से क्रमबद्ध किया जाता है। एक तार्किक अद्यतन एक भौतिक में परिणाम होगा हटाना + डालने (और अधिक महंगी)
अन्य विचार:
- इस कुंजी (किसी भी बाहरी प्रणाली में संदर्भित है, तो आवेदन कैश, एक और डीबी, निर्यात ...), संदर्भ अद्यतन पर तोड़ दिया जाएगा।
- अतिरिक्त, कुछ आरडीबीएमएस कैस्केड अद्यतन, in particular Oracle का समर्थन नहीं करते हैं।
निष्कर्ष के दौरान, एक प्राकृतिक प्राथमिक कुंजी के बदले सरोगेट कुंजी का उपयोग करना आम तौर पर सुरक्षित होता है जिसे बदलने के लिए नहीं माना जाता है - लेकिन अंततः बदली गई आवश्यकताओं या डेटा के कारण अपडेट होने की आवश्यकता हो सकती है प्रवेश त्रुटि
यदि आपको बच्चों की मेज के साथ प्राथमिक कुंजी को अपडेट करना है, तो this post by Tom Kyte for a solution देखें।
मैं कहूंगा कि स्थिरता को आमतौर पर अपरिवर्तनीयता के बजाय पीके की वांछनीय विशेषता के रूप में उद्धृत किया जाता है। [उदाहरण] (http://stackoverflow.com/questions/3632726/what-are-the-design-criteria-for-primary-keys/3668234#3668234) –
@ मार्टिन: मैं भेद को समझता हूं लेकिन मुझे लगता है कि एक * भौतिक * प्राथमिक कुंजी (यानी जिसे आप डीबी में परिभाषित करते हैं) अपरिवर्तनीय होना चाहिए। * वैचारिक डेटा मॉडल * की प्राथमिक कुंजी में आपके द्वारा प्रदान किए गए लिंक से दिए गए उत्तरों में दिए गए गुण होना चाहिए लेकिन अंतिम भौतिक प्राथमिक कुंजी से भिन्न हो सकता है (उदाहरण के लिए परिचितता आईएमओ वास्तविक तालिका की प्राथमिक कुंजी के लिए मानदंड नहीं है)। मेरा जवाब भौतिक मॉडल की प्राथमिक कुंजी से संबंधित है। –
+1, विशेष रूप से सरोगेट कुंजी सुझाव। – DCookie
प्राथमिक कुंजी विशेषताओं को तालिका के किसी भी अन्य विशेषता के रूप में अद्यतन करने योग्य हैं। स्थिरता अक्सर एक कुंजी की वांछनीय संपत्ति होती है लेकिन निश्चित रूप से पूर्ण आवश्यकता नहीं होती है। यदि किसी कुंजी को अद्यतन करने के लिए किसी व्यापारिक परिप्रेक्ष्य से यह समझ में आता है तो ऐसा कोई मौलिक कारण नहीं है कि आपको क्यों नहीं करना चाहिए।
एक रिलेशनल डेटाबेस सिद्धांत बिंदु से, तालिका की प्राथमिक कुंजी को अद्यतन करने पर बिल्कुल कोई समस्या नहीं होनी चाहिए, बशर्ते कि प्राथमिक कुंजी के बीच कोई डुप्लिकेट न हो और आप नल मान डालने की कोशिश न करें प्राथमिक कुंजी कॉलम में से कोई भी।
- 1. किसी तालिका में किसी भी इंडेक्स के बिना प्राथमिक कुंजी?
- 2. प्राथमिक कुंजी के बिना किसी तालिका के लिए जेपीए इकाई
- 3. क्या हम sandcastle तेज कर सकते हैं?
- 4. प्राथमिक कुंजी
- 5. क्या हम किसी दिए गए स्मृति स्थान पर मान निर्दिष्ट कर सकते हैं?
- 6. क्या SQL तालिका में प्राथमिक कुंजी के साथ एकाधिक कॉलम हो सकते हैं?
- 7. क्या हम LINQ के साथ डेटाटेबल फ़िल्टर कर सकते हैं?
- 8. रेल माइग्रेशन तालिका प्राथमिक कुंजी
- 9. क्या हम एक कुंजी स्टोर में एकाधिक प्रमाणपत्र और कुंजी लोड कर सकते हैं?
- 10. प्राथमिक कुंजी
- 11. एसक्यूएल स्वैप प्राथमिक कुंजी मान
- 12. रेल में किसी तालिका में प्राथमिक कुंजी कैसे जोड़ें
- 13. क्या विदेशी कुंजी तालिका प्राथमिक कुंजी बननी चाहिए?
- 14. प्राथमिक कुंजी संयोजन कैसे हो सकता है जिसमें शून्य मान हो सकते हैं?
- 15. हम nstimer के बजाय क्या उपयोग कर सकते हैं?
- 16. क्या हम जावास्क्रिप्ट के साथ 302 रीडायरेक्ट कर सकते हैं?
- 17. एक समग्र प्राथमिक कुंजी
- 18. PHP MySQL जांचें यदि किसी तालिका में प्राथमिक कुंजी है
- 19. ADO.Net इकाई मॉडल में किसी अन्य तालिका में किसी विदेशी तालिका के साथ तालिका को आप कैसे अपडेट करते हैं?
- 20. प्राथमिक कुंजी
- 21. एसक्यूएल - कई-से-अनेक तालिका प्राथमिक कुंजी
- 22. तालिका की प्राथमिक कुंजी प्राप्त करें?
- 23. क्या हम एसडीएल ट्रिडियन में माइग्रेट कर सकते हैं?
- 24. क्या हम एसएसएच कुंजी-आधारित संचार के लिए जेएसएच का उपयोग कर सकते हैं?
- 25. प्राथमिक कुंजी
- 26. क्या हम संपूर्ण कॉन्फ़िगरेशन फ़ाइल एन्क्रिप्ट कर सकते हैं?
- 27. क्या हम हाइबरनेट में संघ का उपयोग कर सकते हैं?
- 28. अनन्य कुंजी बनाम प्राथमिक कुंजी?
- 29. क्या हम एंड्रॉइड में एक फ़ोल्डर एन्क्रिप्ट कर सकते हैं?
- 30. एक GUID प्राथमिक कुंजी और डिफ़ॉल्ट newsequentialid() के साथ एक तालिका पर SQLBulkCopy का उपयोग कैसे कर सकते हैं?
आप ऐसा क्यों करना चाहते हैं? – Rene