在Mysql数据据中创建存储过程执行多条SQL语句,当遇到问题时将所有的执行都回滚,这样存储过程就实现了事物操作。
实现过程:定义一个变量t_error初始值为0,再声明一条语句,如果执行SQL的时候捕获到异常,设置t_error的值为1,在存储过程前设置 autocommit = 0; 在存储过程结束的地方判断t_error的值,0则commit,1则rollback。
创建存储过程的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 调用这个存储过程后,不会向数据库表中插入任何记录。