您的位置:首页 > 数据库 > MySQL

Mysql存储过程的回滚

2014-09-04 15:26 302 查看
在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

调用这个存储过程后,不会向数据库表中插入任何记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: