मेरे पास एक ईमेल कॉलम है जो मैं अद्वितीय होना चाहता हूं। लेकिन मैं यह भी चाहता हूं कि यह अशक्त मूल्यों को स्वीकार करे। क्या मेरे डेटाबेस में 2 शून्य ईमेल हो सकते हैं?
मेरे पास एक ईमेल कॉलम है जो मैं अद्वितीय होना चाहता हूं। लेकिन मैं यह भी चाहता हूं कि यह अशक्त मूल्यों को स्वीकार करे। क्या मेरे डेटाबेस में 2 शून्य ईमेल हो सकते हैं?
जवाबों:
हां, MySQL एक अद्वितीय बाधा के साथ एक कॉलम में कई NULLs की अनुमति देता है।
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
परिणाम:
x
NULL
NULL
1
यह सभी डेटाबेस के लिए सही नहीं है। SQL सर्वर 2005 और पुराने, उदाहरण के लिए, केवल एक स्तंभ में एक एकल NULL मान की अनुमति देता है जिसमें एक अद्वितीय बाधा होती है।
WHERE column IS NOT NULLमुझे विफल नहीं लगता है क्योंकि यह MySQL के मेरे संस्करण में समर्थित नहीं है। किसी को पता है कि मैं कहाँ देख सकता हूँ?
से डॉक्स :
"एक अद्वितीय सूचकांक उन स्तंभों के लिए कई NULL मानों की अनुमति देता है जिनमें NULL हो सकते हैं"
यह सभी इंजनों लेकिन पर लागू होता है BDB ।
मैं अनिश्चित हूं कि क्या लेखक मूल रूप से सिर्फ यह पूछ रहा था कि क्या यह डुप्लिकेट मानों की अनुमति देता है या नहीं या यदि कोई निहित प्रश्न है, तो पूछें, " NULLउपयोग करते समय डुप्लिकेट मानों की अनुमति कैसे दें UNIQUE?" या "केवल एक UNIQUE NULLमूल्य की अनुमति कैसे दें ?"
प्रश्न का उत्तर पहले ही दिया जा चुका है, हाँ अनुक्रमणिका NULLका उपयोग करते समय आपके पास डुप्लिकेट मान हो सकते हैं UNIQUE।
चूँकि मैं इस जवाब पर अड़ा रहा कि "एक UNIQUE NULLमूल्य की अनुमति कैसे दी जाए "। किसी और के लिए जो इस सवाल पर ठोकर खा सकता है, जबकि मेरा बाकी जवाब आपके लिए है ...
MySQL में आपके पास एक UNIQUE NULLमान नहीं हो सकता है , हालांकि आपके पास एक UNIQUEखाली स्ट्रिंग के मूल्य के साथ सम्मिलित करके एक खाली मान हो सकता है ।
चेतावनी: संख्यात्मक और स्ट्रिंग के अलावा अन्य प्रकार 0 या किसी अन्य डिफ़ॉल्ट मान के लिए डिफ़ॉल्ट हो सकते हैं।
UNIQUEबाधा के कारण नहीं, बल्कि बाधा के कारण विफल NOT NULLहोता है। मुझे लगता है कि यह जवाब सवाल के लिए अप्रासंगिक है क्योंकि सवाल विशेष रूप से UNIQUEबाधा के व्यवहार के बारे में है ।
अशक्त अद्वितीय बाधाओं से बचें। आप हमेशा कॉलम को एक नई तालिका में रख सकते हैं, इसे गैर-अशक्त और अद्वितीय बना सकते हैं और फिर उस तालिका को केवल तब ही पॉप्युलेट कर सकते हैं जब आपके पास इसका मूल्य हो। यह सुनिश्चित करता है कि स्तंभ पर किसी भी निर्भरता को सही ढंग से लागू किया जा सकता है और किसी भी समस्या से बचा जा सकता है जो नल के कारण हो सकती है।