Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में TRUNCATE के बाद ऑटो-इन्क्रीमेंट मान रीसेट करना

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 TABLEDELETE 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 टकराव से बचना
  1. - MySQL में ZEROFILL के साथ कस्टम ऑटो-इन्क्रीमेंट सेट करें

    ZEROFILL विशेषता संख्यात्मक कॉलम को बाएं से शून्य से भरकर निर्दिष्ट चौड़ाई तक पैड करती है। यह UNSIGNED भी बनाता है। टेबल बनाएं mysql> CREATE TABLE DemoTable1831 ( UserId INT(7) ZEROFILL AUTO_INCREMENT, PRIMARY KEY(UserId) ); यहां INT(7) का अर्थ है प्रदर्शन चौड़ाई 7 अंक। डेटा डालें mysq

  1. - MySQL क्वेरी: अधिकतम संचयी मान प्राप्त करें

    समाधान सबक्वेरी में गुणनफल की गणना करें, फिर GROUP BY और ORDER BY से अधिकतम खोजें। उदाहरण टेबल बनाएं: INSERT INTO demo23 (value1, value2) VALUES (5,600), (20,800), (7,400), (6,500), (10,300), (11,500); क्वेरी LIMIT 1; परिणाम +-------------+-----------------------+ | total_value | number_of_occu

  1. - MySQL में प्रारंभिक मान और ऑटो इन्क्रीमेंट कैसे सेट करें?

    AUTO_INCREMENT विशेषता का उपयोग नई रो के लिए एक अद्वितीय पहचानकर्ता उत्पन्न करने के लिए किया जाता है। यदि किसी कॉलम को NOT NULL घोषित किया गया है, तो उस कॉलम को NULL असाइन करना संभव है ताकि संख्याओं का अनुक्रम उत्पन्न हो सके। जब किसी AUTO_INCREMENT कॉलम में कोई मान डाला जाता है, तो कॉलम उस मान पर