2010-01-13 17 views
6

तो मैं एक समग्र कुंजी, मूल रूप से 'userID' के साथ इस तालिका है - 'डेटा' अद्वितीय होना चाहिएMySQL में सशर्त समग्र कुंजी?

(मेरे दूसरे प्रश्न SQL table - semi-unique row? देखें) हालांकि, अगर यह यह केवल प्रभाव में आ बनाने के लिए संभव हो गया था मैं सोच रहा था जब userID शून्य नहीं है? इसका मतलब है, 'userID' - 'डेटा' गैर-शून्य उपयोगकर्ता आईडी के लिए अद्वितीय होना चाहिए?

या क्या मैं गलत पेड़ को भड़क रहा हूं?

धन्यवाद
माला

उत्तर

5

एसक्यूएल की कमी तालिका में प्रत्येक पंक्ति के लिए लागू होते हैं। आप कुछ डेटा मानों के आधार पर उन्हें सशर्त नहीं बना सकते हैं।

हालांकि, यदि आप शून्य के बजाय 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'); 
+0

भयानक है, धन्यवाद! जैसा कि मैंने कहा था कि मैंने एक अलग समाधान का उपयोग किया है, लेकिन आपने मुझे मेरे प्रश्न का एक सही उत्तर दिया है और मैं भविष्य में इसका उपयोग निश्चित रूप से करूँगा =) – Mala

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