2012-07-03 13 views
6

मेरे पास आईएसबीएन के साथ एक MySQL MyISAM तालिका है। मैं एक अद्वितीय सूचकांक बनाना चाहता हूं जो मान खाली या शून्य होने पर "डुप्लिकेट" त्रुटि नहीं फेंक देगा।mysql अद्वितीय अनुक्रमणिका खाली या शून्य

क्या यह संभव है?

उत्तर

2

चूंकि आप MyISAM (या INNODB) स्टोरेज इंजन का उपयोग कर रहे हैं, तो संक्षिप्त उत्तर नहीं है। कई खाली स्ट्रिंग अद्वितीय इंडेक्स बाधा के लिए काम नहीं करेंगे, भले ही कई नल होंगे। यदि आप एक एसक्यूएल केवल समाधान चाहते हैं, तो आपकी सबसे अच्छी शर्त, आईएसबीएन फ़ील्ड पर नियमित इंडेक्स बनाना है, और उसके बाद एक संग्रहित प्रक्रिया का उपयोग सम्मिलन प्रॉक्सी के रूप में कार्य करने के लिए करें - जो शून्य या खाली नहीं होने पर विशिष्टता की जांच करता है।

सिर्फ तुम्हारे लिए काम nulls हैं, तो यहाँ है एक बुनियादी बनाएँ:

CREATE TABLE `books` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `isbn` int(13) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `isbn` (`isbn`) 
) 

बस एक नोट ... याद रखें '13' केवल अंकों की संख्या पूर्णांक के लिए निर्दिष्ट किया है यह जब में लौटने दिखाएगा एक प्रश्न, पूर्णांक का आकार नहीं।

+1

मैं न्यूल होने के साथ ठीक हूं। इसे स्थापित करने के लिए, क्या मैं बस आईएनटी (13) डिफॉल्ट नल सेट करूँगा और इसे काम करना चाहिए? – nick

+1

@nick हां, ऊपर दिए गए प्रश्न में मैंने अपना निर्माण कथन जोड़ा है, आप इसे एक वैकल्पिक तालिका में भी उपयोग कर सकते हैं। – Ray

3

आप कुछ इस तरह उपयोग कर सकते हैं,

ALTER तालिका tbl_name अद्वितीय INDEX_NAME (column_list) जोड़ें:

यह बयान एक सूचकांक जिसके लिए मान अनन्य होने चाहिए (शून्य मान के अपवाद है, जो हो सकता है के साथ बनाता है कई बार प्रकट होते हैं)। MySQL INDEXES देखें।

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