MySQL में ऑटो-इन्क्रीमेंट काउंटर का वर्तमान मान बदलना
सिंटैक्स:
ALTER TABLE yourTableName AUTO_INCREMENT = IntegerValue;
व्यावहारिक उदाहरण
1. ऑटो-इन्क्रीमेंट टेबल बनाएं:
mysql> CREATE TABLE changeCurrentAutoIncrementValue (
-> CurrentCount INT AUTO_INCREMENT,
-> PRIMARY KEY(CurrentCount)
-> );
Query OK, 0 rows affected (0.60 sec)
2. डिफ़ॉल्ट मान डालें (1 से शुरू):
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
3. डिफ़ॉल्ट अनुक्रम (1,2,3,4):
+--------------+
| CurrentCount |
+--------------+
| 1 |
| 2 |
| 3 |
| 4 |
+--------------+
4 rows in set (0.00 sec)
4. ऑटो-इन्क्रीमेंट को 300 पर सेट करें:
mysql> ALTER TABLE changeCurrentAutoIncrementValue AUTO_INCREMENT = 300;
Query OK, 0 rows affected (0.27 sec)
5. नए रिकॉर्ड डालें:
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
mysql> INSERT INTO changeCurrentAutoIncrementValue VALUES();
6. अंतिम परिणाम:
+--------------+
| CurrentCount |
+--------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 300 |
| 301 |
| 302 |
+--------------+
7 rows in set (0.00 sec)
महत्वपूर्ण नियम:
- नया
AUTO_INCREMENT मान वर्तमान अधिकतम मान से बड़ा होना चाहिए
- अगर आप 300 से कम मान सेट करने का प्रयास करते हैं, तो MySQL इसे अनदेखा कर देगा (चेतावनी दे सकता है)
- यह केवल अगले मान को प्रभावित करता है, मौजूदा डेटा नहीं बदलता
उपयोग केस:
- माइग्रेशन के बाद ID स्पेस आरक्षित करना
- शार्डिंग/क्लस्टरिंग में ID रेंज आवंटित करना
- टेस्ट डेटा के बाद प्रोडक्शन ID रेंज शुरू करना
- मर्ज/रीस्ट्रक्चरिंग के बाद गैप भरना
वर्तमान ऑटो-इन्क्रीमेंट मान जांचें:
SHOW TABLE STATUS LIKE 'table_name'\G
-- Auto_increment: 300 दिखाएगा
-- या
SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name';
सावधानी:
TRUNCATE TABLE ऑटो-इन्क्रीमेंट को 1 पर रीसेट करता है
- रेप्लिकेशन में सावधानी: मास्टर/स्लेव पर अलग मान समस्या पैदा कर सकते हैं
- बड़े मान (BIGINT रेंज के करीब) सेट न करें