表结构如下:
建立存储过程:
DELIMITER $$
CREATE PROCEDURE p1( OUT p_return_code INTEGER )
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION -- 捕捉错误,如果是sql错误就执行里面的
BEGIN
-- ERROR
SET p_return_code = 1; -- 返回值1,说明sql错误
ROLLBACK; -- 回滚数据
END;
DECLARE EXIT HANDLER FOR SQLWARNING -- 捕捉错误,如果是sql警告就执行里面的
BEGIN
-- WARNING
SET p_return_code = 2; -- 返回值2,说明出现sql警告
ROLLBACK; -- 回滚数据
END;
START TRANSACTION; -- 开始事务
-- 执行sql语句
UPDATE person SET pointps = pointps - 'abc' WHERE personName = '张三';
UPDATE person SET pointps = pointps + 500 WHERE personName = '李四';
COMMIT; -- 提交
-- SUCCESS
SET p_return_code = 0; -- 返回0说明成功
END $$
DELIMITER ;
调用存储过程:
CALL p1(@u);
查询调用结果:
SELECT @u;
再回到数据库刷新,发现数据未发生变化,发生了数据回滚。