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

हम एक MySQL संग्रहीत प्रक्रिया के अंदर रोलबैक लेनदेन कैसे कर सकते हैं?


जैसा कि हम जानते हैं कि रोलबैक लेन-देन शुरू होने के बाद डेटाबेस में किए गए किसी भी बदलाव को वापस कर देगा। रोलबैक करने के लिए MySQL संग्रहीत कार्यविधि में हमें EXIT declare घोषित करना होगा हैंडलर। हम एक हैंडलर का उपयोग स्क्लेक्ससेप्शन या एसक्यूएल चेतावनियों के लिए कर सकते हैं। इसे एक उदाहरण की मदद से समझा जा सकता है जिसमें निम्नलिखित विवरण वाली तालिका के लिए रोलबैक बनाने वाली संग्रहीत प्रक्रिया है -

mysql> SHOW CREATE table gg\G
*************************** 1. row ***************************
       Table: gg
Create Table: CREATE TABLE `gg` (
   `Id` int(11) NOT NULL AUTO_INCREMENT,
   `Name` varchar(30) NOT NULL,
   PRIMARY KEY (`Id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

हम देख सकते हैं कि कॉलम 'नाम' में NULL मान नहीं हो सकते हैं और तालिका में निम्न डेटा है -

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
|  1 | Mohan   |
|  2 | Gaurav  |
|  3 | Sohan   |
|  4 | Saurabh |
|  5 | Yash    |
|  6 | Rahul   |
+----+---------+
6 rows in set (0.00 sec)

उदाहरण

mysql> Delimiter //
mysql> Create Procedure st_transaction_Rollback()
    -> BEGIN
    -> DECLARE exit handler for sqlexception
    -> BEGIN
    -> ROLLBACK;
    -> END;
    -> DECLARE exit handler for sqlwarning
    -> BEGIN
    -> ROLLBACK;
    -> END;
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) values();
    -> UPDATE employee.tbl set name = 'YashPal' where id = 5;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.02 sec)

mysql> Delimiter ;
mysql> CALL st_transaction_Rollback ()
Query OK, 0 rows affected (0.00 sec)

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
|  1 | Mohan   |
|  2 | Gaurav  |
|  3 | Sohan   |
|  4 | Saurabh |
|  5 | Yash    |
|  6 | Rahul   |
+----+---------+
6 rows in set (0.00 sec)

हम उपरोक्त परिणाम सेट से देख सकते हैं कि अद्यतन विवरण द्वारा किए गए परिवर्तनों को रोलबैक किया गया है क्योंकि INSERT की पहली क्वेरी ने एक त्रुटि उत्पन्न की है (NULL मान सम्मिलित करने का प्रयास)।


  1. हम MySQL संग्रहीत प्रक्रिया के अंदर COMMIT लेनदेन कैसे कर सकते हैं?

    जैसा कि हम जानते हैं कि START ट्रांजेक्शन से ट्रांजेक्शन शुरू हो जाएगा और ट्रांजेक्शन शुरू होने के बाद किए गए किसी भी बदलाव के लिए COMMIT का उपयोग किया जाता है। निम्नलिखित उदाहरण में, हमने START लेनदेन के साथ COMMIT के साथ एक संग्रहीत कार्यविधि बनाई है जो एक नया रिकॉर्ड सम्मिलित करेगी और निम्नलिखित

  1. हम MySQL संग्रहीत प्रक्रिया के अंदर START लेनदेन कैसे कर सकते हैं?

    जैसा कि हम जानते हैं कि START ट्रांजेक्शन ट्रांजेक्शन शुरू कर देगा और ऑटो-कमिट मोड को बंद कर देगा। निम्नलिखित उदाहरण में, हमने START लेनदेन के साथ एक संग्रहीत कार्यविधि बनाई है जो तालिका कर्मचारी में एक नया रिकॉर्ड सम्मिलित करेगी। mysql> Select * from employee.tbl; +----+---------+ | Id | Name &n

  1. एक MySQL संग्रहीत कार्यविधि इसके अंदर किसी अन्य MySQL संग्रहीत कार्यविधि को कैसे कॉल कर सकती है?

    यह बहुत संभव है कि एक MySQL संग्रहीत कार्यविधि इसके अंदर किसी अन्य MySQL संग्रहीत कार्यविधि को कॉल कर सकती है। इसे प्रदर्शित करने के लिए, हम एक उदाहरण ले रहे हैं जिसमें एक संग्रहीत कार्यविधि last_insert_id का पता लगाने के लिए किसी अन्य संग्रहीत कार्यविधि को कॉल करेगी। उदाहरण mysql> Create table e