आइए समझते हैं कि AUTO_INCREMENT कैसे काम करता है:
AUTO_INCREMENT विशेषता का उपयोग नई रो के लिए एक अद्वितीय पहचानकर्ता उत्पन्न करने के लिए किया जाता है। आइए देखें कि यह स्टेटमेंट कैसे काम करता है। उससे पहले, नीचे दी गई क्वेरी पर विचार करें:
क्वेरी
CREATE TABLE tableName (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
name CHAR(30) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO tableName (name) VALUES ('val1'),('val2'),('val3'), ('val4');
SELECT * FROM tableName;
आउटपुट
+----+---------+ | id | name | +----+---------+ | 1 | val1 | | 2 | val2 | | 3 | val3 | | 4 | val4 | +----+---------+
उपरोक्त क्वेरी में, 'AUTO_INCREMENT' कॉलम के लिए कोई मान निर्दिष्ट नहीं किया गया था, इसलिए MySQL ने 'id' कॉलम को स्वचालित रूप से संख्याओं का एक अनुक्रम असाइन किया। यदि 'NO AUTO VALUE ON ZERO' SQL मोड सक्षम नहीं है तो 0 का मान भी स्पष्ट रूप से असाइन किया जा सकता है ताकि संख्या अनुक्रम 0 से शुरू हो।
यदि किसी कॉलम को 'NOT NULL' घोषित किया गया है, तो उस कॉलम को NULL असाइन करना संभव है ताकि संख्याओं का अनुक्रम उत्पन्न हो सके।
जब किसी AUTO_INCREMENT कॉलम में कोई मान डाला जाता है, तो कॉलम उस मान पर सेट हो जाता है, और अनुक्रम भी रीसेट हो जाता है ताकि यह सबसे बड़े कॉलम मान से क्रमिक सीमा में स्वचालित रूप से मान उत्पन्न करे।
एक मौजूदा 'AUTO_INCREMENT' कॉलम को अपडेट किया जा सकता है जो 'AUTO_INCREMENT' अनुक्रम को भी रीसेट करेगा।
सबसे हाल ही में ऑटो-जेनरेटेड 'AUTO_INCREMENT' मान को SQL में 'LAST_INSERT_ID()' फंक्शन का उपयोग करके या 'mysql_insert_id()' का उपयोग करके प्राप्त किया जा सकता है जो एक C API फंक्शन है।
ये फंक्शन कनेक्शन-विशिष्ट हैं, जिसका अर्थ है कि उनके रिटर्न मान अन्य कनेक्शन द्वारा किए गए इन्सर्ट ऑपरेशन से प्रभावित नहीं होते हैं।
'AUTO_INCREMENT' कॉलम के लिए सबसे छोटा पूर्णांक डेटा प्रकार उपयोग किया जा सकता है, जो उपयोगकर्ता द्वारा आवश्यक अधिकतम अनुक्रम मान को रखने के लिए पर्याप्त बड़ा होगा।
जब कॉलम डेटा प्रकार की ऊपरी सीमा तक पहुंच जाता है, तो संख्याओं का अनुक्रम उत्पन्न करने का एक और प्रयास किया जाता है। लेकिन यह विफल हो जाता है।
इसलिए, यदि संभव हो तो UNSIGNED विशेषता का उपयोग करें ताकि कॉलम AUTO_INCREMENT मानों में मानों की अधिक सीमा की अनुमति मिल सके।