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

MySQL स्टोर्ड प्रोसीजर से रो मान को 1 से बढ़ाएं/घटाएं (इंक्रीमेंट/डिक्रीमेंट)

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 वेरिएबल टाइप स्पष्ट करें
  1. - MySQL में UPDATE WHERE से विशिष्ट पंक्ति और कॉलम मान अपडेट करें

    MySQL में UPDATE स्टेटमेंट और WHERE क्लॉज का उपयोग करके विशिष्ट पंक्ति के विशिष्ट कॉलम का मान बदल सकते हैं। सिंटैक्स UPDATE टेबल_नाम SET कॉलम_नाम = नया_मान WHERE शर्त; उदाहरण: StudentId अपडेट करें जहां StudentName = Carol Taylor 1. टेबल बनाएं ); 2. डेटा डालें INSERT INTO DemoTable1569 VALUES(D

  1. - MySQL स्टोर्ड प्रोसीजर में WHERE IN() क्लॉज का उपयोग कैसे करें?

    MySQL स्टोर्ड प्रोसीजर में डायनामिक WHERE IN() क्लॉज का उपयोग करने के लिए प्रिपेयर्ड स्टेटमेंट (Prepared Statements) का उपयोग करना पड़ता है, क्योंकि IN क्लॉज में सीधे पैरामीटर पास नहीं किया जा सकता। समस्या सीधे पैरामीटर उपयोग नहीं कर सकते: -- यह काम नहीं करेगा: SELECT * FROM table WHERE id IN (inpu

  1. - MySQL में स्टोर्ड प्रोसीजर में IF ELSE लागू करें?

    IF-ELSE लागू करने के लिए, सिंटैक्स निम्न है: if yourCondition then yourStatement1; else yourStatement2; end if ; स्टोर्ड प्रोसीजर में IF-ELSE की उपरोक्त अवधारणा को समझने के लिए, आइए एक स्टोर्ड प्रोसीजर बनाते हैं: mysql> delimiter // mysql> create procedure If_else_stored_demo(value in