समाधान: AUTO_INCREMENT रीसेट + TRUNCATE
सभी डेटा हटाने के बाद AUTO_INCREMENT को 1 पर रीसेट करने के लिए ALTER TABLE और TRUNCATE TABLE का उपयोग करें।
सिंटैक्स
ALTER TABLE yourTableName AUTO_INCREMENT = 1; TRUNCATE TABLE yourTableName;
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE resettingPrimaryKeyDemo (
-> UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
-> );
mysql> INSERT INTO resettingPrimaryKeyDemo VALUES (), (), (), ();
-- 4 पंक्तियाँ, UserId: 1, 2, 3, 4
रीसेट करना
mysql> ALTER TABLE resettingPrimaryKeyDemo AUTO_INCREMENT = 1; Query OK, 0 rows affected (0.14 sec) mysql> TRUNCATE TABLE resettingPrimaryKeyDemo; Query OK, 0 rows affected (0.89 sec)
नया डेटा डालना
mysql> INSERT INTO resettingPrimaryKeyDemo VALUES (), (), (); mysql> SELECT * FROM resettingPrimaryKeyDemo; +--------+ | UserId | +--------+ | 1 | | 2 | | 3 | +--------+
महत्वपूर्ण अंतर
| कमांड | डेटा हटाता है | AUTO_INCREMENT रीसेट | ट्रिगर फायर | रोलबैक संभव |
|---|---|---|---|---|
| DELETE | हाँ | नहीं | हाँ | हाँ (ट्रांजैक्शन में) |
| TRUNCATE | हाँ | हाँ | नहीं | नहीं (DDL) |
| DROP + CREATE | हाँ (टेबल सहित) | हाँ | नहीं | नहीं |
⚠️ चेतावनी: प्राथमिक कुंजी रीसेट करने के खतरे
- विदेशी कुंजी: संदर्भित टेबल में ऑर्फ़न रिकॉर्ड बनेंगे
- रिप्लिकेशन: स्लेव पर संघर्ष हो सकता है
- बैकअप/रिस्टोर: पॉइंट-इन-टाइम रिकवरी जटिल
- ऑडिट: इतिहास ट्रेल टूट जाता है
सुरक्षित विकल्प
- गैप स्वीकार करें: AUTO_INCREMENT गैप सामान्य हैं और प्रदर्शन पर कोई प्रभाव नहीं
- सॉफ्ट डिलीट:
deleted_atकॉलम का उपयोग करें - नई टेबल: यदि वास्तव में नई शुरुआत चाहिए, तो नई टेबल बनाएं
केवल AUTO_INCREMENT देखना (बिना रीसेट)
SHOW TABLE STATUS LIKE 'yourTableName'\G -- या SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'table';