1. 程式人生 > >Mysql儲存過程的回滾

Mysql儲存過程的回滾

在Mysql資料據中建立儲存過程執行多條SQL語句,當遇到問題時將所有的執行都回滾,這樣儲存過程就實現了事物操作。

實現過程:定義一個變數t_error初始值為0,再宣告一條語句,如果執行SQL的時候捕獲到異常,設定t_error的值為1,在儲存過程前設定 autocommit = 0; 在儲存過程結束的地方判斷t_error的值,0則commit,1則rollback。

建立儲存過程的SQL如下:

</pre><pre name="code" class="sql">DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `proTest`()
BEGIN

	DECLARE t_error INTEGER DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
    
   set autocommit=0;
   START TRANSACTION;
   INSERT INTO student VALUES(1, 'test1',1,3);   /* 第一條 insert 能執行 */
   INSERT INTO student VALUES('a', 'test2',3,6);  /* 第二條 insert,不能執行 */

    IF t_error = 0 THEN
            COMMIT;
        ELSE
            ROLLBACK;
        END IF; 
END

呼叫這個儲存過程後,不會向資料庫表中插入任何記錄。