आप जिस SQL mode का उपयोग कर रहे हैं उसके आधार पर, MySQL दो चीजों में से एक करता है जब AUTO_INCREMENT
संख्यात्मक कॉलम का मान सीमा से बाहर हो जाता है। आपको किसी भी मामले में त्रुटि मिलती है, लेकिन विभिन्न कारणों से।
सख्त मोड MySQL रेंज मान से बाहर खारिज कर देता है, एक अवैध मान त्रुटि फेंकता है, और INSERT
विफल रहता है। डिफ़ॉल्ट गैर सख्त मोड MySQL डेटा प्रकार के लिए अनुमति दी उच्चतम करने के लिए मूल्य कम कर देता है, और INSERT
प्रदर्शन करती हैं। लेकिन INSERT
विफल रहता है क्योंकि AUTO_INCREMENT
विशेषता संभावित मान पहले से ही इस्तेमाल किया जा करने के सभी कारण बना हुआ है, और आपको यह त्रुटि (अहस्ताक्षरित SMALLINT
उदाहरण) मिलती है:
MySQL said:
#1062 - Duplicate entry '65535' for key 1
BIGINT
उदाहरण के लिए यहाँ, "65535" से बदलें 18 क्विंटलियन, हालांकि यह संभावना नहीं है कि यह त्रुटि कभी भी उत्पादन डेटाबेस पर हुई है।
लेकिन TINYINT
और SMALLINT
रों यह बहुत आसानी से हो सकता है यदि आप किसी एप्लिकेशन के जीवनकाल में संभव कुंजी मान (INSERT
रों की संख्या) बहुत मूल्यवान समझना के साथ। कल्पना करें कि आप अपने कोड में बदलाव कर रहे हैं और परीक्षण कर रहे हैं कि आपका डेटा सही तरीके से डाला जा रहा है। अचानक आपका आवेदन उपर्युक्त त्रुटि के साथ काम करता है। आप ज्ञात अच्छे कोड में परिवर्तन वापस रोल करते हैं, लेकिन त्रुटि दूर नहीं जाएगी ... बहुत निराशाजनक।
ठीक है। मुझे नहीं लगता कि मेरा ऐप उस लंबे => 500 साल तक चलेगा। – ashitaka
इसी प्रकार, यदि आप केवल एक बार एक दूसरे डालें, अपने अनुप्रयोग एक 32-बिट पर हस्ताक्षर किए पूर्णांक के साथ 68 साल के लिए चलाए जा सकें। प्रति रिकॉर्ड 4-बाइट बचाएं और यदि आप कर सकते हैं तो 32-बिट int का उपयोग करें। – jmucchiello
मैं दूसरा हूं। ऐसी चीजें हैं जिन्हें डेटाबेस बनाने के दौरान अधिक सावधानी की आवश्यकता होती है। – Tomalak