MySQL : transaction within a stored procedure(MySQL:存储过程中的事务)
问题描述
我的存储过程的基本结构是,
BEGIN.. 声明语句 ..开始交易;.. 查询 1 .... 查询 2 .... 查询 3 ..犯罪;结尾<块引用>
MySQL 版本: 5.1.61-0ubuntu0.11.10.1-log
目前,如果查询 2"失败,则提交查询 1"的结果.
- 如果任何查询失败,我如何回滚事务?
看一看 http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html
基本上你声明错误处理程序将调用回滚
开始交易;声明 SQLEXCEPTION 的退出处理程序开始回滚;退出程序;结尾;犯罪;The basic structure of my stored procedure is,
BEGIN
.. Declare statements ..
START TRANSACTION;
.. Query 1 ..
.. Query 2 ..
.. Query 3 ..
COMMIT;
END
MySQL version: 5.1.61-0ubuntu0.11.10.1-log
Currently, if 'query 2' fails, result of 'query 1' is committed.
- How can I rollback the transaction if any of the query fails?
Take a look at http://dev.mysql.com/doc/refman/5.0/en/declare-handler.html
Basically you declare error handler which will call rollback
START TRANSACTION;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
EXIT PROCEDURE;
END;
COMMIT;
这篇关于MySQL:存储过程中的事务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:MySQL:存储过程中的事务
基础教程推荐
- SSMS 中的权限问题:“对象 'extended_properties'、数据库 'mssqlsystem_resource'、... 错误 229)上的 SELECT 权限被拒绝" 2022-01-01
- SQL 效率:WHERE IN 子查询 vs. JOIN 然后 GROUP 2021-01-01
- SQL Server 实例在登录协商期间返回无效或不受支持的协议版本 2021-01-01
- 是否可以执行按位分组功能? 2021-01-01
- 需要 MySQL 5.1 中的抽象触发器来更新审计日志 2021-01-01
- 如何使用 mysql.connector 禁用查询缓存 2022-01-01
- SQL:使用来自具有相同列名的两个表中的数据... 2021-01-01
- 在 SQL 中连接多个表 2021-01-01
- 无法解决整理冲突 2021-01-01
- 将 SQL Server DateTime 列迁移到 DateTimeOffset 2021-01-01
