MySQL 5.1 और बाद में डिफ़ॉल्ट auto_increment व्यवहार INSERT के विफल होने पर ऑटो-इंक्रीमेंट मान "खो" देगा। अर्थात्, यह हर बार 1 से बढ़ता है, लेकिन INSERT के विफल होने पर वेतन वृद्धि को पूर्ववत नहीं करता है। ~750 मान खोना असामान्य है लेकिन असंभव नहीं है (मैंने एक ऐसी साइट के लिए परामर्श किया जो सफल होने वाले प्रत्येक INSERT के लिए 1500 को छोड़ रही थी)।
आप innodb_autoinc_lock_mode=0
को बदल सकते हैं MySQL 5.0 व्यवहार का उपयोग करने और कुछ मामलों में मूल्यों को खोने से बचने के लिए। देखें http://dev.mysql. com/doc/refman/5.1/hi/innodb-auto-increment-handling.html
अधिक जानकारी के लिए।
जाँच करने के लिए एक और चीज़ है auto_increment_increment
. का मान विन्यास चर। यह डिफ़ॉल्ट रूप से 1 है, लेकिन हो सकता है कि आपने इसे बदल दिया हो। फिर से, इसे 1 या 2 से ऊपर किसी चीज़ पर सेट करना बहुत ही असामान्य है, लेकिन संभव है।
मैं अन्य टिप्पणीकारों से सहमत हूं, ऑटोइनक कॉलम अद्वितीय होने का इरादा है, लेकिन जरूरी नहीं कि लगातार। आपको शायद इसके बारे में इतनी चिंता नहीं करनी चाहिए जब तक कि आप ऑटोइंक मूल्य इतनी तेज़ी से आगे नहीं बढ़ रहे हैं कि आप एक आईएनटी की सीमा से बाहर हो सकते हैं (यह मेरे साथ हुआ है)।
<ब्लॉकक्वॉट>आपने इसे हमेशा के लिए 1500 को छोड़कर कैसे ठीक किया?
INSERT के विफल होने का कारण यह था कि उस पर एक UNIQUE बाधा के साथ एक और कॉलम था, और INSERT उस कॉलम में डुप्लिकेट मान डालने का प्रयास कर रहा था। यह क्यों मायने रखता है, इसके विवरण के लिए मेरे द्वारा लिंक किया गया मैन्युअल पृष्ठ पढ़ें।
इसे INSERT करने का प्रयास करने से पहले मूल्य के अस्तित्व की जांच करने के लिए पहले एक चयन करना था। यह सामान्य ज्ञान के खिलाफ जाता है, जो कि केवल INSERT को आज़माना और किसी भी डुप्लिकेट कुंजी अपवाद को संभालना है। लेकिन इस मामले में, असफल INSERT के साइड-इफेक्ट के कारण ऑटो-इंक वैल्यू खो गई। SELECT करने से पहले ऐसे लगभग सभी अपवाद समाप्त हो जाते हैं।
लेकिन आप भी एक संभावित अपवाद को संभालना होगा, भले ही आप पहले चुनें। आपके पास अभी भी दौड़ की स्थिति है।
<ब्लॉकक्वॉट>तुम सही कह रही हो! innodb_autoinc_lock_mode=0 एक आकर्षण की तरह काम किया।
आपके मामले में, मैं जानना चाहूंगा कि क्यों इतने सारे सम्मिलन विफल हो रहे हैं। मुझे संदेह है कि कई SQL डेवलपर्स की तरह, आप अपने AJAX हैंडलर में अपने INSERTs करने के बाद सफलता की स्थिति की जांच नहीं कर रहे हैं, इसलिए आप कभी नहीं जानते कि उनमें से कई विफल हो रहे हैं।
वे शायद अभी भी असफल हो रहे हैं, आप साइड इफेक्ट के रूप में ऑटो-इंक आईडी नहीं खो रहे हैं। आपको वास्तव में निदान करना चाहिए कि इतने सारे विफल क्यों होते हैं। हो सकता है कि आप या तो अधूरा डेटा जनरेट कर रहे हों, या ज़रूरत से ज़्यादा लेन-देन कर रहे हों।