MySQL-এ স্টোরড প্রোসিডিউর লিখে একাধিক রোয়ের মান একসাথে ইনক্রিমেন্ট এবং ডিক্রিমেন্ট করা যায়। এটি ট্রানজ্যাকশনাল কনসিস্টেন্সি নিশ্চিত করে।
উদাহরণ
mysql> CREATE TABLE IncrementAndDecrementValue (UserId INT, UserScores INT);
mysql> INSERT INTO IncrementAndDecrementValue VALUES (101,20000), (102,30000), (103,40000);
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 ;
mysql> CALL IncrementAndDecrementRowValueByOne();
mysql> SELECT * FROM IncrementAndDecrementValue;
+--------+------------+
| UserId | UserScores |
+--------+------------+
| 101 | 19999 |
| 102 | 30001 |
| 103 | 40000 |
+--------+------------+
উন্নত পদ্ধতি: সরাসরি `UPDATE ... SET col = col + 1 WHERE ...` ব্যবহার করুন। প্রোসিডিউর জরুরি হলে ভেরিয়েবল ছাড়াই `UPDATE t SET col = col - 1 WHERE id=101; UPDATE t SET col = col + 1 WHERE id=102;` করুন।