TRUNCATE TABLE और ALTER TABLE AUTO_INCREMENT
TRUNCATE TABLE टेबल के सभी डेटा को हटाता है और ऑटो-इन्क्रीमेंट काउंटर को रीसेट करता है (आमतौर पर 1 पर)। कस्टम प्रारंभिक मान के लिए ALTER TABLE ... AUTO_INCREMENT = N का उपयोग करें।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable825(
Value INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
Query OK, 0 rows affected (0.63 sec)
3 रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable825 VALUES(),(),(); Query OK, 3 rows affected (...)
वर्तमान स्थिति देखना
mysql> SELECT * FROM DemoTable825;
+-------+ | Value | +-------+ | 1 | | 2 | | 3 | +-------+ 3 rows in set (0.00 sec)
टेबल ट्रंकेट करना
mysql> TRUNCATE TABLE DemoTable825; Query OK, 0 rows affected (0.58 sec)
ऑटो-इन्क्रीमेंट को 2000 पर सेट करना
mysql> ALTER TABLE DemoTable825 AUTO_INCREMENT = 2000; Query OK, 0 rows affected (0.16 sec) Records: 0 Duplicates: 0 Warnings: 0
नए रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable825 VALUES(),(),(); Query OK, 3 rows affected (...)
परिणाम: ID 2000 से शुरू
mysql> SELECT * FROM DemoTable825;
+-------+ | Value | +-------+ | 2000 | | 2001 | | 2002 | +-------+ 3 rows in set (0.00 sec)
TRUNCATE vs DELETE
| पहलू | TRUNCATE TABLE | DELETE FROM |
|---|---|---|
| गति | बहुत तेज (मेटाडेटा ऑपरेशन) | धीमी (रो-बाय-रो) |
| ऑटो-इन्क्रीमेंट | रीसेट हो जाता है (1 पर) | नहीं बदलता |
| ट्रिगर्स | फायर नहीं होते | फायर होते हैं |
| रोलबैक | नहीं (DDL) | हाँ (DML, ट्रांजैक्शन में) |
| WHERE क्लॉज | नहीं | हाँ |
| लॉक | टेबल लॉक | रो लॉक |
ऑटो-इन्क्रीमेंट मान जांचना
SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_db' AND TABLE_NAME = 'DemoTable825';
वर्तमान अधिकतम ID से आगे सेट करना
ALTER TABLE DemoTable825 AUTO_INCREMENT = (SELECT MAX(Value) + 1 FROM DemoTable825);
महत्वपूर्ण प्रतिबंध
- ऑटो-इन्क्रीमेंट मान वर्तमान अधिकतम मान से कम नहीं सेट किया जा सकता (एरर 1062)
TRUNCATEके बाद टेबल खाली होती है, इसलिए कोई भी मान सेट कर सकते हैं- InnoDB में ऑटो-इन्क्रीमेंट काउंटर मेमोरी में होता है, रीस्टार्ट पर रीसेट हो सकता है (8.0+ में पर्सिस्टेंट)
उपयोग के मामले
- टेस्ट डेटा रीसेट करना
- माइग्रेशन के बाद ID रेंज संरेखित करना
- शार्डिंग/पार्टीशनिंग के लिए ID रेंज आरक्षित करना
- लीगेसी सिस्टम के साथ ID टकराव से बचना