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

MySQL में ऑटो-इन्क्रीमेंट ID रिजर्व (आरक्षित) कैसे करें?

ट्रांजैक्शन और ROLLBACK द्वारा ऑटो-इन्क्रीमेंट मान आरक्षित करना

कभी-कभी आपको भविष्य के उपयोग के लिए ऑटो-इन्क्रीमेंट मानों का एक ब्लॉक "आरक्षित" करना होता है (उदाहरण: बाहरी सिस्टम के साथ सिंक)। इसे ट्रांजैक्शन में पंक्तियां डालकर और फिर रोलबैक करके किया जा सकता है।

विधि

START TRANSACTION;
INSERT INTO yourTable VALUES (), (), (), ();  -- 4 पंक्तियां डालें
ROLLBACK;
SELECT LAST_INSERT_ID() INTO @reservedValue;

उदाहरण

CREATE TABLE reservingAutoIncrementDemo (
    UserId INT NOT NULL AUTO_INCREMENT PRIMARY KEY
);

START TRANSACTION;
INSERT INTO reservingAutoIncrementDemo VALUES (), (), (), ();
SELECT * FROM reservingAutoIncrementDemo;  -- आईडी 1,2,3,4 दिखेंगे
ROLLBACK;

SELECT LAST_INSERT_ID() INTO @IncrementedValue;
SELECT @IncrementedValue;

आउटपुट

+-------------------+
| @IncrementedValue |
+-------------------+
| 1                 |
+-------------------+

व्याख्या

  • INSERT ... VALUES () डिफ़ॉल्ट मान (ऑटो-इन्क्रीमेंट के लिए अगला मान) डालता है।
  • ROLLBACK पंक्तियों को हटा देता है, लेकिन ऑटो-इन्क्रीमेंट काउंटर आगे बढ़ा रहता है (InnoDB में यह व्यवहार संस्करण पर निर्भर कर सकता है; 8.0+ में काउंटर रोलबैक पर भी बढ़ा रहता है)।
  • LAST_INSERT_ID() अंतिम सफल INSERT द्वारा जनरेटेड पहला ऑटो-इन्क्रीमेंट मान लौटाता है।

चेतावनी और विकल्प

  • यह व्यवहार स्टोरेज इंजन और संस्करण पर निर्भर करता है। MyISAM में काउंटर रोलबैक पर रीसेट हो सकता है।
  • उत्पादन में "ID रिजर्वेशन" के लिए बेहतर: एक अलग sequence टेबल या MySQL 8.0+ के SEQUENCE ऑब्जेक्ट (MariaDB) उपयोग करें।
  • AUTO_INCREMENT = N से अगला मान सेट करें: ALTER TABLE tbl AUTO_INCREMENT = 1000;
  1. - MySQL में पारित IDs के कस्टम क्रम को बनाए रखना

    परिचय जब आपको विशिष्ट IDs के क्रम में रिकॉर्ड प्राप्त करने हों जो प्राकृतिक क्रम (ASC/DESC) से अलग हो, तो ORDER BY CASE स्टेटमेंट का उपयोग करके कस्टम क्रम परिभाषित किया जा सकता है। उदाहरण: टेबल बनाना और डेटा डालना ); Query OK, 0 rows affected (0.61 sec) INSERT INTO DemoTable1550 VALUES(109, Mike

  1. - MySQL में एकल पैरामीटर में एकाधिक ID पास करना?

    एकल पैरामीटर में एकाधिक ID पास करने के लिए FIND_IN_SET() का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable1817 ( EmployeeName varchar(20), CountryName varchar(20) ); Query OK, 0 rows affected (0.00 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql&

  1. - MySQL में डुप्लिकेट आईडी के लिए अधिकतम राशि दिखाएं

    GROUP BY और MAX() से डुप्लिकेट आईडी की उच्चतम राशि प्राप्त करें डुप्लिकेट ग्राहक आईडी के लिए अधिकतम राशि पाने के लिए MAX() के साथ GROUP BY का उपयोग करें। टेबल बनाएं और डेटा डालें: mysql> create table DemoTable2003 ( CustomerId int, Amount int ); Query OK, 0 rows affected (0.65 sec) mysql> inse