2011-03-25 12 views
8

एसक्यूएल सर्वर 2008/2005एसक्यूएल प्राथमिक कुंजी '0' स्वीकार कर सकती है?

मैं प्राथमिक और अद्वितीय कुंजी के बीच उलझन में हूं।

मुझे पता है कि प्राथमिक कुंजी न्यूल की अनुमति नहीं देगी, जबकि अद्वितीय पूर्ण स्वीकार करेगा। इसके अलावा, एक तालिका में अद्वितीय कुंजी की 'एन' संख्या हो सकती है ..!

क्या प्राथमिक कुंजी शून्य की अनुमति देगी?

+0

बस एक सूचनात्मक टिप्पणी। यह प्रश्न 'mySql' – dhpratik

उत्तर

14

प्राथमिक कुंजी शून्य हो सकती है, लेकिन यदि आप कॉलम पर पहचान सेट करते हैं तो यह सामान्य रूप से शून्य के बजाय 1 पर शुरू होगा।

+0

प्राथमिक कुंजी के पास पहचान कॉलम होगा .. (सबसे अधिक संभावना या अधिक परिदृश्य) .. तो क्या मुझे लगता है कि अगर पहचान है तो हम बीज/वृद्धि 0 से शुरू कर सकते हैं। शून्य से शुरू करने के लिए 1 के बजाय, यह कैसे करें? – goofyui

+0

आप ज़ीरो में वृद्धि क्यों शुरू करना चाहते हैं? लेकिन हां ज़ीरो में बीज शुरू करें, और फिर एक से बढ़ोतरी करें, इसलिए यह पहचान होगी (0,1) –

+0

मैंने परिदृश्य का परीक्षण किया ..! यदि कोई पहचान नहीं है .., प्राथमिककी शून्य की अनुमति देगी ..! – goofyui

3

हां। नल एक मूल्य की अनुपस्थिति है। 0 एक मूल्य है।

+0

पर भी लागू होता है प्राथमिक कुंजी suppports शून्य? – goofyui

+0

हां। प्राथमिक कुंजी ज़ीरो – climbage

7

प्राथमिक कुंजी प्राथमिक कुंजी के डेटाटाइप पर पाठ्यक्रम के आधार पर 0 की अनुमति दे सकती है। एक स्वत: जेनरेटेड पीके (पहचान) 0 से शुरू हो सकता है लेकिन यह डिफ़ॉल्ट व्यवहार नहीं है, आपको इसे 0 से शुरू करने के लिए सेट करना होगा (यदि आप चाहें तो नकारात्मक संख्याओं से शुरू हो सकते हैं)। सर्वोत्तम परिणामों के लिए यह तालिका में डेटा दर्ज करना शुरू करने से पहले किया जाना चाहिए।

आप जो नहीं कर सकते हैं उसके पास पीके के रूप में 0 के साथ कई रिकॉर्ड हैं क्योंकि पीके की विशिष्टता आवश्यकता का उल्लंघन करता है।

यदि आपके पास मौजूदा डेटा है और एक रिकॉर्ड चाहते हैं जिसमें एक विशिष्ट उद्देश्य के लिए शून्य का मूल्य है (उदाहरण के लिए हमने अपनी आयात प्रक्रिया के लिए उपयोगकर्ता को रखा है, तो सम्मिलित क्षेत्र दिखा सकता है कि रिकॉर्ड आयात से आया था) , तो आप जो चाहते हैं वह पहचान क्षेत्र में मैन्युअल डालने की अनुमति देना है, ताकि आप अपने इच्छित मान पर यह एक विशिष्ट रिकॉर्ड दर्ज कर सकें, फिर सामान्य सेटिंग पर वापस आएं। यह इस तरह से किया जाता है:

set Identity_insert dbo.table1 ON 
insert dbo.table1 (id, myfield) 
Values (0, 'test') 
set Identity_insert dbo.table1 OFF 

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

+0

पूरी तरह से और विस्तृत स्पष्टीकरण के लिए धन्यवाद, ओपी ने जो कुछ भी नहीं पूछा, उसे दिखाने के लिए यह एकमात्र उत्तर है। प्रतिभाशाली! – Rustavore

संबंधित मुद्दे