MySQL में ऑटो-इन्क्रीमेंट प्राइमरी की को रीसेट (1 से शुरू) करने के लिए, TRUNCATE TABLE का उपयोग करें जो डेटा हटाता है और ऑटो-इन्क्रीमेंट काउंटर रीसेट करता है, या ALTER TABLE से मैन्युअली सेट करें।
विधि 1: TRUNCATE TABLE (सबसे सरल, डेटा हटाता है)
टेबल बनाएं:
mysql> CREATE TABLE DemoTable1929 (
UserId INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (UserId)
);
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1929 VALUES (), (), ();
डेटा (ID 1, 2, 3):
+--------+ | UserId | +--------+ | 1 | | 2 | | 3 | +--------+
TRUNCATE से रीसेट करें:
mysql> TRUNCATE TABLE DemoTable1929;
नया डेटा इन्सर्ट करें (ID 1 से शुरू):
mysql> INSERT INTO DemoTable1929 VALUES (), ();
परिणाम:
+--------+ | UserId | +--------+ | 1 | | 2 | +--------+
विधि 2: ALTER TABLE (डेटा रखते हुए काउंटर सेट करें)
-- अगला ऑटो-इन्क्रीमेंट मान सेट करें ALTER TABLE DemoTable1929 AUTO_INCREMENT = 1;
नोट: यदि टेबल में डेटा है, तो अगला मान MAX(id) + 1 या निर्दिष्ट मान में से जो बड़ा हो, होगा।
विधि 3: डेटा रखते हुए रीसेट (पुन: क्रमांकन)
मौजूदा डेटा को 1, 2, 3... से पुन: क्रमांकित करने के लिए:
-- 1. नई टेबल बनाएं CREATE TABLE new_table LIKE DemoTable1929; -- 2. डेटा कॉपी करें (ID के बिना) INSERT INTO new_table (col1, col2, ...) SELECT col1, col2, ... FROM DemoTable1929 ORDER BY UserId; -- 3. टेबल स्वैप करें RENAME TABLE DemoTable1929 TO old_table, new_table TO DemoTable1929;
महत्वपूर्ण अंतर
| विधि | डेटा | ऑटो-इन्क्रीमेंट | विदेशी कुंजी |
|---|---|---|---|
| TRUNCATE | हट जाता है | रीसेट (1) | ब्लॉक कर सकता है (FK निर्भर) |
| ALTER TABLE | रखा जाता है | सेट होता है (अगला मान) | कोई प्रभाव नहीं |
| पुन: क्रमांकन | रखा जाता है (नए ID) | रीसेट | FK अपडेट आवश्यक |
सावधानियां
- विदेशी कुंजी: रेफरेंस करने वाली टेबल्स मौजूद होने पर TRUNCATE/पुन: क्रमांकन ब्लॉक हो सकता है
- ट्रांजैक्शन: TRUNCATE ट्रांजैक्शनल नहीं है (रोलबैक नहीं)
- ट्रिगर: TRUNCATE DELETE ट्रिगर फायर नहीं करता
- प्रतिकृति: रिप्लिकेशन में व्यवहार भिन्न हो सकता है
बेस्ट प्रैक्टिस
- टेस्ट/डेव वातावरण: TRUNCATE ठीक है
- उत्पादन: डेटा रखते हुए ALTER TABLE या योजनाबद्ध माइग्रेशन
- प्राइमरी की मान आमतौर पर अपरिवर्तनीय होने चाहिए (रीसेट/पुन: क्रमांकन से बचें)