MySql使用存儲過程實現事務的提交或者回滾


 1 DELIMITER $$  
 2 DROP PROCEDURE IF EXISTS  test_sp1 $$  
 3 CREATE PROCEDURE test_sp1( )  
 4  BEGIN  
 5     DECLARE t_error INTEGER DEFAULT 0;  
 6     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  
 7   
 8         START TRANSACTION;  
 9             UPDATE `testdb`.`t_student` SET `stu_name` = '哈哈9' WHERE `id` = 9;
10             UPDATE `testdb`.`t_student` SET `stu_name` = '哈哈10' WHERE `id` = 10;
11             UPDATE `testdb`.`t_student` SET `stu_name` = '哈哈11' WHERE `id` = 11;
12         IF t_error = 1 THEN  
13             ROLLBACK;  
14         ELSE  
15             COMMIT;  
16         END IF;  
17         SELECT t_error;
18  END$$ 
19 CALL test_sp1( );

說明 :

DELIMITER $$ 使用DELIMITER關鍵字來重新定義命令結束符,默認的命令結束符為分號';'(也就是原先是鍵入;之后再回車,命令會執行,現在是鍵入$$之后命令會執行)

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;  創建一個sql異常處理器,只要發生異常就將t_error的值置為1
START TRANSACTION;    開啟事務  (在存儲過程中只能使用start transaction來開啟事務,不能使用begin,因為mysql會自動將begin識別為begin...end)

IF t_error = 1 THEN 
ROLLBACK; ELSE COMMIT; END IF; 通過判斷t_error的值來看是否發生過sql異常,從而來決定是提交事務還是來回滾事務
SELECT t_error;    查看t_error的值
CALL test_sp1( );  調用剛剛定義的存儲過程 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM