हम जानते हैं कि ROLLBACK ट्रांजैक्शन शुरू होने के बाद डेटाबेस में किए गए किसी भी परिवर्तन को वापस कर देगा। MySQL स्टोर्ड प्रोसीजर में ROLLBACK करने के लिए हमें EXIT हैंडलर घोषित करना होगा। हम sqlexception या SQL चेतावनियों के लिए हैंडलर का उपयोग कर सकते हैं। इसे उस उदाहरण की मदद से समझा जा सकता है जिसमें निम्न विवरण वाली टेबल के लिए ROLLBACK वाला स्टोर्ड प्रोसीजर बनाया गया है:
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)
हम देख सकते हैं कि कॉलम 'name' में 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)
हम उपरोक्त परिणाम सेट से देख सकते हैं कि UPDATE स्टेटमेंट द्वारा किए गए परिवर्तन ROLLBACK हो गए हैं क्योंकि INSERT की पहली क्वेरी ने त्रुटि फेंकी (NULL मान सम्मिलित करने का प्रयास)।