MySQL में यूजर-डिफाइंड वेरिएबल का उपयोग करके UPDATE स्टेटमेंट में मानों को वृद्धिशील रूप से अपडेट करें।
सिंटैक्स
-- वेरिएबल इनिशियलाइज़ करें SET @incrementValue := initial_value; -- इन्क्रीमेंट के साथ UPDATE UPDATE yourTableName SET columnName = (SELECT @incrementValue := @incrementValue + @incrementValue);
उदाहरण
टेबल बनाना
mysql> create table UpdateValueIncrementally ( -> ProductId int -> ); Query OK, 0 rows affected (0.90 sec)
रिकॉर्ड डालना
mysql> insert into UpdateValueIncrementally values(10); mysql> insert into UpdateValueIncrementally values(100); mysql> insert into UpdateValueIncrementally values(1000); mysql> insert into UpdateValueIncrementally values(110); mysql> insert into UpdateValueIncrementally values(102);
अपडेट से पहले
mysql> select *from UpdateValueIncrementally;
+-----------+ | ProductId | +-----------+ | 10 | | 100 | | 1000 | | 110 | | 102 | +-----------+
वेरिएबल इनिशियलाइज़ और UPDATE
mysql> set @incrementValue := 33333; Query OK, 0 rows affected (0.00 sec) mysql> update UpdateValueIncrementally set ProductId = (select @incrementValue := @incrementValue + @incrementValue); Query OK, 5 rows affected (0.21 sec)
अपडेट के बाद
mysql> select *from UpdateValueIncrementally;
+-----------+ | ProductId | +-----------+ | 66666 | | 133332 | | 266664 | | 533328 | | 1066656 | +-----------+
व्याख्या
@incrementValue := 33333— प्रारंभिक मान सेट करता है@incrementValue := @incrementValue + @incrementValue— वर्तमान मान को दोगुना करता है (33333 → 66666 → 133332...)- प्रत्येक पंक्ति के लिए वेरिएबल अपडेट होता है
- नोट: यह उदाहरण दोगुना करता है, निश्चित वृद्धि के लिए
@incrementValue := @incrementValue + 1उपयोग करें
सामान्य वृद्धि पैटर्न (1 से बढ़ाना)
SET @seq := 0; UPDATE table_name SET column_name = (@seq := @seq + 1) ORDER BY some_column;
आधुनिक विकल्प: विंडो फंक्शन (MySQL 8.0+)
-- सीक्वेंस नंबर जनरेट करना UPDATE table_name t JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY sort_column) AS rn FROM table_name ) seq ON t.id = seq.id SET t.column_name = seq.rn;
सावधानियां
- वेरिएबल विधि क्रम पर निर्भर — हमेशा
ORDER BYउपयोग करें - बिना ORDER BY के परिणाम अप्रत्याशित हो सकते हैं
- जटिल क्वेरी में वेरिएबल व्यवहार अनिश्चित हो सकता है
- MySQL 8.0+ में विंडो फंक्शन या CTE प्राथमिकता दें