MySQL स्टोर्ड प्रोसीजर में वेरिएबल और UPDATE से विशिष्ट पंक्तियों के मान बढ़ाना/घटाना
व्यावहारिक उदाहरण
1. टेबल बनाएं:
mysql> CREATE TABLE IncrementAndDecrementValue (
-> UserId INT,
-> UserScores INT
-> );
Query OK, 0 rows affected (0.60 sec)
2. डेटा डालें:
mysql> INSERT INTO IncrementAndDecrementValue VALUES(101,20000);
mysql> INSERT INTO IncrementAndDecrementValue VALUES(102,30000);
mysql> INSERT INTO IncrementAndDecrementValue VALUES(103,40000);
3. मूल डेटा:
+--------+------------+
| UserId | UserScores |
+--------+------------+
| 101 | 20000 |
| 102 | 30000 |
| 103 | 40000 |
+--------+------------+
3 rows in set (0.00 sec)
4. स्टोर्ड प्रोसीजर बनाएं (UserId 101 घटाएं, 102 बढ़ाएं):
mysql> DELIMITER //
mysql> CREATE PROCEDURE IncrementAndDecrementRowValueByOne()
-> BEGIN
-> DECLARE first INT;
-> DECLARE second INT;
-> SET first = (SELECT UserScores FROM IncrementAndDecrementValue WHERE UserId = 101);
-> SET second = (SELECT UserScores FROM IncrementAndDecrementValue WHERE UserId = 102);
-> UPDATE IncrementAndDecrementValue SET UserScores = first - 1 WHERE UserId = 101;
-> UPDATE IncrementAndDecrementValue SET UserScores = second + 1 WHERE UserId = 102;
-> END //
Query OK, 0 rows affected (0.17 sec)
mysql> DELIMITER ;
5. प्रोसीजर कॉल करें:
mysql> CALL IncrementAndDecrementRowValueByOne();
Query OK, 1 row affected (0.24 sec)
6. परिणाम:
+--------+------------+
| UserId | UserScores |
+--------+------------+
| 101 | 19999 | ← 20000 - 1
| 102 | 30001 | ← 30000 + 1
| 103 | 40000 | ← अपरिवर्तित
+--------+------------+
3 rows in set (0.00 sec)
सरल विकल्प (बिना स्टोर्ड प्रोसीजर):
-- सीधा UPDATE (एटॉमिक, बेहतर)
UPDATE IncrementAndDecrementValue
SET UserScores = CASE UserId
WHEN 101 THEN UserScores - 1
WHEN 102 THEN UserScores + 1
ELSE UserScores
END
WHERE UserId IN (101, 102);
स्टोर्ड प्रोसीजर कब उपयोगी:
- कॉम्प्लेक्स बिजनेस लॉजिक (कई स्टेप, शर्तें, लूप)
- पुन: उपयोग योग्य एनकैप्सुलेशन
- सुरक्षा: टेबल पर सीधा UPDATE अधिकार न देकर EXECUTE अधिकार दें
- ऑडिट/लॉगिंग
सर्वोत्तम अभ्यास:
- सरल अपडेट के लिए सीधा SQL प्राथमिकता दें
- स्टोर्ड प्रोसीजर में ट्रांजैक्शन उपयोग करें
- इनपुट पैरामीटर वैलिडेट करें
DECLARE वेरिएबल टाइप स्पष्ट करें