न्यूल और न्यूल के बीच क्या अंतर है? और उनका उपयोग कब किया जाना चाहिए?MySQL पूर्ण या नहीं पूर्ण प्रश्न यह है?
उत्तर
शून्य मतलब है कि आप खाने के लिए मान प्रदान करने के लिए ...
नहीं NULL मतलब है कि आप क्षेत्रों के लिए एक मूल्य प्रदान करनी चाहिए नहीं है।
उदाहरण के लिए, यदि आप किसी सिस्टम के लिए पंजीकृत उपयोगकर्ताओं की एक तालिका बना रहे हैं, तो आप यह सुनिश्चित करना चाहते हैं कि उपयोगकर्ता-आईडी हमेशा एक मान (यानी न्यूल नहीं) के साथ आबादी हो, लेकिन वैकल्पिक पति/पत्नी नाम फ़ील्ड खाली छोड़ें (एनयूएलएल)
सरल जवाब देने के किसी को भी दिया है हो सकता है। ;) – Zack
जेडीबीसी के बाहर, MySQL आपको कॉलम पर 'डिफॉल्ट' होने पर 'नॉट न्यूल' कॉलम * के लिए मान छोड़ने देता है। मैंने देखा है कि ऐसा कुछ प्रोग्रामर को समझ में नहीं आता है, लेकिन इस तरह यह काम करता है। – staticsan
@staticsan यह सच नहीं है, या कम से कम बहुत भ्रामक है, यह कहने के लिए कि "MySQL आपको 'नल नल' कॉलम के लिए मान छोड़ने देता है" - कुछ मूल्य प्रदान किया जाना चाहिए (यह बिल्कुल सही नहीं है ', और यदि आप इसे आपूर्ति न करें तो MySQL 'DEFAULT' मान की आपूर्ति करेगा। यदि कॉलम 'DEFAULT' मान को परिभाषित नहीं करता है, तो सख्त मोड सक्षम नहीं होने पर MySQL डेटा प्रकार के लिए निहित डिफ़ॉल्ट मान प्रदान कर सकता है। ([डॉक्स लिंक] (https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html)) – Air
NOT NULL
मतलब है कि एक कॉलम में NULL
मूल्य नहीं कर सकते हैं -, कुछ भी निर्दिष्ट किया जाता है, तो जब उस स्तंभ के लिए एक पंक्ति डालने, यह डिफ़ॉल्ट जो कुछ भी निर्दिष्ट किया जाता है (या कोई डिफ़ॉल्ट निर्दिष्ट किया जाता है, तो उपयोग करेगा बजाय, MySQL के डिफ़ॉल्ट है जो कुछ भी उस प्रकार के लिए)।
फ़ील्ड जो NOT NULL
नहीं हैं, उनके संभावित रूप से NULL
(जो अनिवार्य रूप से एक लापता/अज्ञात/अनिर्दिष्ट मान का अर्थ है) हो सकता है। NULL
सामान्य मानों से भिन्न व्यवहार करता है, see here for more info।
अधिक 'तकनीकी' जवाब है, :) – Zack
NOT NULL
एक स्तंभ बाधा है और आप एक स्तंभ है कि एक प्राथमिक कुंजी में नहीं है जिनमें से आप मान जाएगा हमेशा पता (इसलिए यह स्पष्ट रूप से उनके बारे में NOT NULL
कहने के लिए मूर्खतापूर्ण है प्राथमिक कुंजी आंतरिक रूप से नहीं-शून्य कर रहे हैं) है, जब इस्तेमाल किया जाना चाहिए ज्ञात (अज्ञात या अनुपलब्ध नहीं) तो उस कॉलम में नल की आवश्यकता नहीं है।
NULL
एक संदर्भ है जो कई संदर्भों में होता है - जिसमें कॉलम बाधा शामिल है, जहां इसका मतलब डिफ़ॉल्ट के रूप में होता है (यानी, नल की अनुमति है) - लेकिन कई अन्य संदर्भों में भी, उदाहरण के लिए INSERT...VALUES
कथन के हिस्से के रूप में कॉलम में एक शून्य डालने के लिए।
न्यूल और न्यूल के बीच क्या अंतर है?
जब एक तालिका बनाने या एक तालिका में एक कॉलम जोड़ने, आप या तो NULL
या NOT NULL
का उपयोग कर स्तंभ मान optionality निर्दिष्ट करने के लिए की जरूरत है। NOT NULL
का अर्थ है कि किसी भी रिकॉर्ड के लिए कॉलम में NULL
मान नहीं हो सकता है; NULL
का अर्थ है NULL
एक स्वीकार्य मान है (यहां तक कि जब कॉलम में एक विदेशी कुंजी बाधा होती है)। चूंकि NULL
कोई मान नहीं है, तो आप देख सकते हैं कि कुछ इसे वैकल्पिकता क्यों कहते हैं - क्योंकि डेटाबेस तालिका के लिए कॉलम रखने के लिए आवश्यक है, तालिका के भीतर प्रत्येक रिकॉर्ड के लिए कॉलम का एक उदाहरण होना चाहिए।
और उनका उपयोग कब किया जाना चाहिए?
यह आपके व्यावसायिक नियमों द्वारा निर्धारित किया जाता है।
आम तौर पर आप NOT NULL
होने के लिए जितना संभव हो उतने कॉलम चाहते हैं क्योंकि आप यह सुनिश्चित करना चाहते हैं कि डेटा हमेशा वहां रहता है।
मेरा सुझाव है
- उपयोग हर क्षेत्र पर शून्य नहीं यदि आप
- उपयोग शून्य अगर वहाँ एक समझदार कारण है यह शून्य
जो नहीं है क्षेत्रों के बाद हो सकता है कर सकते हैं नल नलबल के लिए एक सार्थक अर्थ बग पेश करने की संभावना है, जब नल उन्हें दुर्घटना से दर्ज करते हैं। न्यूल का उपयोग करना इसे रोकता है।
नल फ़ील्ड के लिए सबसे आम कारण यह है कि आपके पास एक विदेशी कुंजी फ़ील्ड है जो विकल्प है, यानी "शून्य या एक" रिश्ते के लिए हमेशा लिंक नहीं होता है।
आप पाते हैं आप कि एक antipattern की तरह लग शुरू होता है कॉलम जिनमें से कई शून्य हो सकता है की बहुत सारी के साथ एक मेज, है, तो विचार करना ऊर्ध्वाधर विभाजन आपके आवेदन संदर्भ :)
एक और उपयोगी है में और अधिक समझ में आता है कि क्या NULL के लिए उपयोग करें - एक इंडेक्स में सभी कॉलम बनाना NULL उस पंक्ति के लिए बनाए गए इंडेक्स रिकॉर्ड को रोक देगा, जो इंडेक्स को अनुकूलित करता है; आप पंक्तियों के केवल एक बहुत ही छोटे सबसेट को इंडेक्स करना चाहते हैं (उदाहरण के लिए केवल एक% या कुछ पर "सक्रिय" ध्वज सेट के लिए) - एक ऐसा इंडेक्स बनाना जो कॉलम से शुरू होता है जो आम तौर पर नल स्पेस बचाता है और उस इंडेक्स को अनुकूलित करता है।
यह भी ध्यान दें कि NULL किसी और के बराबर नहीं है, यहां तक कि न्यूल स्वयं भी नहीं।
उदाहरण के लिए:
mysql> select if(NULL=NULL, "null=null", "null!=null");
+------------------------------------------+
| if(NULL=NULL, "null=null", "null!=null") |
+------------------------------------------+
| null!=null |
+------------------------------------------+
1 row in set (0.00 sec)
जब आप एक स्तंभ है कि आंशिक रूप से भर जाता है पर एक अद्वितीय कुंजी की आवश्यकता शून्य की यह परिभाषा बहुत उपयोगी है। ऐसे मामले में आप सभी रिक्त मानों को न्यूल के रूप में छोड़ सकते हैं, और यह विशिष्टता कुंजी के किसी भी उल्लंघन का कारण नहीं बनेंगे, क्योंकि NULL! = NULL।
mysql> select if(null is null, "null is null", "null is not null");
+------------------------------------------------------+
| if(null is null, "null is null", "null is not null") |
+------------------------------------------------------+
| null is null |
+------------------------------------------------------+
1 row in set (0.01 sec)
के रूप में दूसरों को जवाब दे दिया है, NOT NULL
का अर्थ है कि NULL
एक की अनुमति दी मान नहीं है:
यहाँ आप देख सकते हैं कि अगर कुछ शून्य है का एक उदाहरण है। हालांकि, आप कभी आदि रिक्त स्ट्रिंग ''
(varchar
के लिए) या 0
(int
के लिए) का विकल्प होगा,
एक अच्छा फीचर जब NOT NULL
का उपयोग कर कि यदि आपको कोई त्रुटि प्राप्त कर सकते हैं या चेतावनी आप सेट भूल जाने पर है स्तंभ की INSERT
के दौरान मूल्य। (NOT NULL
स्तंभ मानते हुए कोई DEFAULT
है)
NULL
स्तंभों की इजाजत दी साथ मुख्य हिचकी वे <>
(बराबर नहीं) ऑपरेटर के साथ कभी नहीं मिल जाएगा कि है। उदाहरण के लिए, के साथ निम्न category
रों
Desktops
Mobiles
NULL -- probably embedded devices
=
ऑपरेटर के रूप में उम्मीद
select * from myTable where category="Desktops";
हालांकि काम करता है, <>
ऑपरेटर किसी भी NULL
प्रविष्टियों को बाहर निकाल देगा।
select * from myTable where category<>"Mobiles";
-- returns only desktops, embedded devices were not returned
इस सूक्ष्म कीड़े का कारण हो सकता है, खासकर अगर स्तंभ प्रारंभिक परीक्षण के दौरान कोई NULL
डेटा है, लेकिन बाद में कुछ NULL
मूल्यों बाद में विकास की वजह से जुड़ जाते हैं। इस कारण से मैंने सभी कॉलम NOT NULL
पर सेट किए हैं।
हालांकि, यह NULL
मूल्यों अनुमति देने के लिए उपयोगी है जब एक UNIQUE
KEY
/INDEX
का उपयोग कर किया जा सकता है। आम तौर पर एक अनूठी कुंजी को पूरे तालिका के लिए कॉलम (या स्तंभों का संयोजन) अद्वितीय होना आवश्यक है। अद्वितीय कुंजी एक बड़ी सुरक्षा है कि डेटाबेस आपके लिए लागू होगा।
कुछ मामलों में, आप अधिकांश पंक्तियों के लिए सुरक्षा चाहते हैं, लेकिन अपवाद हैं।
यदि उस विशेष UNIQUE KEY
द्वारा संदर्भित कोई भी स्तंभ NULL
है, तो उस पंक्ति के लिए विशिष्टता अब लागू नहीं की जाएगी। जाहिर है यह केवल तभी काम करेगा यदि आप उस कॉलम पर NULL
एस को अनुमति देते हैं, ऊपर बताए गए हिचकी को समझते हैं।
आप, NULL
मूल्यों की अनुमति देने के NULL
रों पता लगाने के लिए एक अतिरिक्त शर्त के साथ अपने <>
बयान लिखने पर विचार करने का फैसला करते।
select * from myTable where category<>"Desktops" or category is null;
< and > ऑपरेटर के बारे में थोड़ा सा न्यूल के साथ काम नहीं कर रहा एक महत्वपूर्ण अंतर्दृष्टि है, साझा करने के लिए धन्यवाद। –
- 1. विभाजन पूर्ण, या नहीं?
- 2. बाग: पूर्ण स्रोत या नहीं?
- 3. Emacs: -fh (पूर्ण ऊंचाई) प्रश्न
- 4. MySQL न तो पूर्ण बाधा
- 5. MySQL कास्ट पूर्ण करने के लिए पूर्ण 0
- 6. MySQL जुड़ता है और पूर्ण पाठ खोज
- 7. पूर्ण कैलेंडर कैलेंडर ईवेंट MySQL
- 8. सोलर JQuery स्वत: पूर्ण स्वत: पूर्ण नहीं है
- 9. MySQL पूर्ण-पाठ खोज बनाम %%
- 10. यह पता लगाना कि स्टैक पूर्ण है
- 11. सशर्त नहीं पूर्ण मामला एसक्यूएल
- 12. क्या यह समस्या एनपी-पूर्ण है?
- 13. कमांड नहीं मिला: पूर्ण
- 14. Win32 API यह निर्धारित करने के लिए कि कोई पथ सापेक्ष या पूर्ण है या नहीं?
- 15. To.Take() या नहीं। टेक(), यह प्रश्न
- 16. WebForms: गतिशील (या पूर्ण) MasterPages
- 17. पूर्ण
- 18. सीएसएस - पूर्ण स्थिति या फ्लोट?
- 19. AVPlayer "पूर्ण नहीं कार्रवाई कर सकता है"
- 20. पूर्ण पथ या फ़ाइल नाम
- 21. MySQL - प्राथमिक कुंजी के लिए आवश्यक "नहीं पूर्ण" बाधाएं हैं?
- 22. MySQL पूर्ण टेक्स्ट खोज बूलियन मोड भ्रम
- 23. MySQL पूर्ण पाठ विशेष वर्णों को संभालना
- 24. MySQL 5.6 InnoDB पूर्ण पाठ खोज
- 25. कई टेबलों में MySQL पूर्ण पाठ खोज
- 26. जेएमएस कतार पूर्ण है
- 27. क्लैंग पूर्ण काम नहीं करता
- 28. ImageView पूर्ण स्क्रीन में क्यों नहीं है?
- 29. रेल पूर्ण 406 स्वीकार्य नहीं
- 30. mysql% क्वेरी की तरह पूर्ण-पाठ सूचकांक
शीर्षक मुझे पर एक मुस्कान लाया: डी – Aishwar