में पूर्ण मान मुझे प्राथमिक कुंजी बनाने वाले कई स्तंभों के साथ एक तालिका मिली है। संग्रहीत डेटा की प्रकृति इन क्षेत्रों में से कुछ को NULL
मानों की अनुमति देती है। मैं इस तरह के रूप में मेरी मेज तैयार की है:मल्टी-कॉलम प्राथमिक कुंजी
CREATE TABLE `test` (
`Field1` SMALLINT(5) UNSIGNED NOT NULL,
`Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`Field1`, `Field2`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
हालांकि, यह इस तरह से पता चलता है जब मैं describe test
चलाएँ:
|| *Field* || *Type* || *Null* || *Key* || *Default* || *Extra*
|| Field1 || smallint(5) unsigned || NO || PRI || ||
|| Field2 || decimal(5,2) unsigned || NO || PRI || 0.00 ||
और जब कोई NULL
मूल्य डालने मैं एक त्रुटि जा रहे हैं।
स्तंभ 'फ़ील्ड 2' अशक्त
इस है क्योंकि एक क्षेत्र है कि एक प्राथमिक कुंजी का हिस्सा है नल नहीं हो सकता नहीं हो सकता है? NULL
के लिए '0' का उपयोग करने के अलावा मेरे विकल्प क्या हैं?
वीजे शाह के लिंक के लिए धन्यवाद, @Tomalak [उत्कृष्ट बिंदु] बनाता है (http://stackoverflow.com/a/386061/673991) है कि इस प्रतिबंध को बुनियादी एसक्यूएल से इस प्रकार है सिद्धांत यह है कि, चूंकि प्राथमिक कुंजी के हिस्सों की तुलना प्रत्येक पंक्ति से प्रत्येक पंक्ति से की जानी चाहिए, और "** न्यूल तुलना की तुलना नहीं हो सकता है - इस तरह की तुलना का परिणाम हमेशा नल ** होगा" जो प्राथमिक कुंजी विशिष्टता को लागू करता है गैर-शून्य कॉलम। –