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
调用这个存储过程后,不会向数据库表中插入任何记录。
实现过程:定义一个变量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
调用这个存储过程后,不会向数据库表中插入任何记录。
相关文章推荐
- Mysql存储过程中的事务回滚
- [MYSQL] 存储过程 动态表名/异常处理/事物回滚/日期
- mysql 存储过程事务支持回滚
- mysql存储过程以"数组"形式入参实现表间复制 并实现回滚
- MySQL存储过程中实现回滚
- php调用mysql存储过程
- php调用mysql存储过程
- MySQL 5.0 新特性教程 存储过程:(五)
- mysql的视图、存储过程在还原备份功能上,噩梦暂时醒来。
- MySQL与存储过程的相关资料
- .NET操作MySQL存储过程
- MySQL 5.0新特性教程 存储过程:第一讲
- mysql存储过程及c#调用标准版
- MYsql 存储过程简单语法
- [共享]我的mysql分页存储过程...
- MySQL 5.0 新特性教程 存储过程:(三)
- mysql存储过程基本函数
- PHP调用MySQL存储过程
- 写的第一个mysql的存储过程
- mysql存储过程学习总结-操作符