यूज़र-डिफाइंड वेरिएबल से क्रमबद्ध अपडेट
MySQL में किसी कॉलम को सॉर्ट क्रम के अनुसार क्रमिक मानों से अपडेट करने के लिए यूज़र-डिफाइंड वेरिएबल के साथ UPDATE ... ORDER BY का उपयोग करें।
सेटअप
mysql> CREATE TABLE DemoTable (
FirstName VARCHAR(20),
Position INT
);
mysql> INSERT INTO DemoTable VALUES('Chris', 100), ('Robert', 120), ('David', 130);
मूल डेटा
mysql> SELECT * FROM DemoTable;
+-----------+----------+
| FirstName | Position |
+-----------+----------+
| Chris | 100 |
| Robert | 120 |
| David | 130 |
+-----------+----------+
Position को 10 से बढ़ाकर पुनः क्रमांकित करना
mysql> SET @myPosition := 100;
mysql> UPDATE DemoTable SET Position = @myPosition := @myPosition + 10 ORDER BY Position;
परिणाम
mysql> SELECT * FROM DemoTable;
+-----------+----------+
| FirstName | Position |
+-----------+----------+
| Chris | 110 |
| Robert | 120 |
| David | 130 |
+-----------+----------+
व्याख्या
SET @myPosition := 100- वेरिएबल आरंभ करता हैORDER BY Position- वर्तमान Position के अनुसार क्रमबद्ध करता है@myPosition := @myPosition + 10- प्रत्येक पंक्ति के लिए 10 बढ़ाता है और असाइन करता है
महत्वपूर्ण नोट्स
ORDER BYक्लॉजUPDATEमें MySQL-विशिष्ट एक्सटेंशन है- वेरिएबल असाइनमेंट
:=ऑपरेटर का उपयोग करता है - यह तकनीक रैंकिंग, क्रमांकन, या सीक्वेंस पुनर्निर्माण के लिए उपयोगी है
सावधानी
MySQL 8.0+ में विंडो फ़ंक्शन (ROW_NUMBER()) अधिक आधुनिक विकल्प प्रदान करते हैं।