2012-05-05 12 views
10

MySQL डेटाबेस में प्राथमिक कुंजी के लिए "नहीं पूर्ण" बाधाओं को घोषित करना आवश्यक है? प्राथमिक कुंजी में नल मान नहीं हो सकते हैं क्योंकि यह auto_increments वैसे भी है और स्वचालित रूप से फ़ील्ड रिकॉर्ड भरता है। तो क्या मैं यह कहने में सही हूं कि मैं अपनी प्राथमिक कुंजी के लिए "नहीं पूर्ण" बाधा को हटा सकता हूं?MySQL - प्राथमिक कुंजी के लिए आवश्यक "नहीं पूर्ण" बाधाएं हैं?

+1

कॉलम पर होने के बाद उन्हें चोट नहीं पहुंची है और तालिका परिभाषा को पढ़ने पर चीजें _explicit_ बनाती हैं। यदि, भविष्य में, आप प्राथमिक कुंजी बाधा बदलते हैं, तो आपके पास अभी भी 'न्यूल न' बाधा है। – Oded

+4

आपके पास दो अवधारणाएं हैं जो आपके पास नहीं होनी चाहिए। एक प्राथमिक कुंजी को ऑटो वृद्धिशील कॉलम नहीं होना चाहिए, न ही (यदि किसी तालिका में एक है) तो ऑटो वृद्धिशील कॉलम प्राथमिक कुंजी होना चाहिए। सिर्फ इसलिए कि वे * एक साथ * एक साथ उपयोग किए जाने का मतलब यह नहीं है कि वे एक ही बात हैं। –

उत्तर

11

(आप अपने प्रश्न mysql टैग किया है के रूप में।) MySQL में, आप इसे स्पष्ट रूप से ऐसा करने के लिए नहीं है। the manual से:

एक PRIMARY KEY एक अद्वितीय सूचकांक जहां सभी प्रमुख स्तंभों NOT NULL के रूप में परिभाषित किया जाना चाहिए। अगर उन्हें स्पष्ट रूप से NOT NULL के रूप में घोषित नहीं किया गया है, तो MySQL उन्हें स्पष्ट रूप से (और चुपचाप) घोषित करता है।

बेशक

, सिर्फ इसलिए कि आप करने का मतलब यह नहीं कि आप स्पष्टता के लिए करने के लिए नहीं चाहते हो सकता है नहीं है, आदि

+1

न केवल यह पीके कॉलम को 'नॉट नल' के रूप में घोषित करता है, अगर उन्हें 'न्यूल' के रूप में घोषित किया गया है तो यह ओवरराइड/उन्हें 'न्यूल' में संशोधित करता है। –

1

हाँ और नहीं आप निकाल सकते हैं "शून्य नहीं", कि यद्यपि बाधा को दूर नहीं करेगा। व्यक्तिगत रूप से मैं उन्हें छोड़ दूंगा, आपको उन्हें बाहर निकालने से कुछ भी लाभ नहीं मिलता है।

+0

नहीं, आप नहीं कर सकते। यदि कोई कॉलम प्राथमिक कुंजी का हिस्सा है, तो नल नलिका को नल में बदला नहीं जा सकता है। –

+1

@ypercube उन्होंने "नल में परिवर्तन" नहीं कहा, उन्होंने कहा "नल को हटाएं"। सिर्फ इसलिए कि डीडीएल पाठ में न्यूल नहीं है इसका मतलब यह नहीं है कि यह लागू नहीं है। –

+0

@ ब्रैंको: यदि उसका मतलब है "परिभाषा से" नल "शब्द को हटाएं", हाँ, मैं सहमत हूं। फिर से पढ़ना, आप सही हैं, शायद यही मतलब था। –

0

प्राथमिक कुंजी में निरर्थक कॉलम शामिल नहीं होना चाहिए। auto_increment चेक बाधा नहीं है, (यह एक डिफ़ॉल्ट बाधा है), इसलिए आप auto_increment की उपस्थिति के बावजूद प्राथमिक कुंजी का हिस्सा कॉलम की परिभाषा से not null को हटा नहीं सकते हैं। MySQL में प्राथमिक कुंजी के लिए तालिका बनाते समय आपको not null टाइप करने की आवश्यकता नहीं है, क्योंकि इंजन स्वचालित रूप से इस बाधा को जोड़ता है।

0

हमें स्पष्ट रूप से कॉलम को शून्य के रूप में घोषित करने की आवश्यकता नहीं है क्योंकि प्राथमिक कुंजी बाधा कॉलम को पूर्ण नहीं करती है। मैंने ओरेकल में चेक किया है।

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