एसक्यूएल की कमी तालिका में प्रत्येक पंक्ति के लिए लागू होते हैं। आप कुछ डेटा मानों के आधार पर उन्हें सशर्त नहीं बना सकते हैं।
हालांकि, यदि आप शून्य के बजाय NULL
का उपयोग कर सकते हैं, तो आप अद्वितीय बाधा के आसपास हो सकते हैं। एक अद्वितीय बाधा कई प्रविष्टियों की अनुमति देती है जिनमें NULL
है। इसका कारण यह है कि विशिष्टता का मतलब है कि कोई भी बराबर मान मौजूद हो सकता है। समानता का अर्थ है value1 = value2
सत्य होना चाहिए। लेकिन एसक्यूएल में, NULL = NULL
अज्ञात है, सच नहीं है।
CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64));
INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo');
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
अब तक तो अच्छा है, अब आप सोच सकते हैं निम्नलिखित बयानों अद्वितीय बाधा का उल्लंघन होगा, लेकिन वे नहीं है:
INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz');
स्रोत
2010-01-13 18:12:40
भयानक है, धन्यवाद! जैसा कि मैंने कहा था कि मैंने एक अलग समाधान का उपयोग किया है, लेकिन आपने मुझे मेरे प्रश्न का एक सही उत्तर दिया है और मैं भविष्य में इसका उपयोग निश्चित रूप से करूँगा =) – Mala