首页 > 数据库 >MySQL存储过程中如何使用ROLLBACK

MySQL存储过程中如何使用ROLLBACK

时间:2024-05-15 18:09:37浏览次数:22  
标签:存储 ROLLBACK -- MySQL 事务 处理程序 使用

在MySQL存储过程中,可以使用ROLLBACK来撤销之前执行的所有未提交的更改。当与BEGIN和COMMIT结合使用时,ROLLBACK可以帮助您管理事务并确保数据的完整性。以下是一个示例存储过程,它使用TRY...CATCH块来捕获异常,并在需要时执行ROLLBACK。

请注意,MySQL本身并不直接支持TRY...CATCH错误处理块,但您可以使用DECLARE ... HANDLER来声明错误处理程序。以下是一个示例:

sql
DELIMITER //

CREATE PROCEDURE MyProcedure()
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
-- 发生错误时执行此处的代码
ROLLBACK;
-- 可以选择性地插入错误日志或返回错误消息
SELECT 'An error occurred, transaction rolled back.' AS error_message;
END;

START TRANSACTION;

-- 这里是您的业务逻辑,可能涉及多个SQL语句
UPDATE my_table SET column1 = 'value1' WHERE id = 1;
UPDATE my_table SET column2 = 'value2' WHERE id = 2;
-- 可能还有其他操作...

-- 如果没有异常发生,则提交事务
COMMIT;
SELECT 'Transaction committed successfully.' AS success_message;
END //

DELIMITER ;

在这个示例中:

使用DELIMITER //更改默认的语句分隔符,以便在存储过程内部使用分号。
使用CREATE PROCEDURE创建存储过程。
使用DECLARE EXIT HANDLER FOR SQLEXCEPTION声明一个错误处理程序,该处理程序将在SQL异常发生时执行。在此处理程序中,我们使用ROLLBACK撤销事务中的所有更改。
使用START TRANSACTION开始一个新的事务。
在事务中执行您的业务逻辑,可能涉及多个SQL语句。
如果没有发生异常,使用COMMIT提交事务。
使用DELIMITER ;将语句分隔符恢复为默认的分号。

当您调用此存储过程时,如果在执行过程中发生任何SQL异常,错误处理程序将被触发,并执行ROLLBACK以撤销更改。否则,如果所有操作都成功完成,则提交事务。

标签:存储,ROLLBACK,--,MySQL,事务,处理程序,使用
From: https://www.cnblogs.com/wzihan/p/18194433

相关文章

  • Ubuntu20.04安装MySQL8主从
    ......
  • MySQL主从- slave跳过错误
    mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续跳过错误有两种方式:一、跳过指定数量的事务mysql>slavestop;mysql>SETGLOBALSQL_SLAVE_SKIP_COUNTER=1#跳过一个事务mysql>slavestart二、修改mysql的配置文件通过sl......
  • MySQL数据库连接超时
    应用日志报错,应用反馈频繁连接超时,导致应用无法正常提供服务。 可能的问题原因如下:数据库timeout参数设置不合理数据库连接串设置有误连接池配置不是最佳实践或者连接池满网络波动防火墙策略异常数据库压力大导致响应缓慢数据库连接达到上限未知原因处理过程:检查......
  • MySQL 给用户添加 ALTER VIEW 的权限
    本文分享自华为云社区《MySQL给用户添加ALTERVIEW的权限》,作者:皮牙子抓饭。MySQL是一个广泛使用的关系型数据库管理系统,用于许多Web应用程序和企业级解决方案中。在MySQL中,用户权限的管理是非常重要的,以确保数据库安全性和数据完整性。在某些情况下,需要为用户添加特定......
  • mysql
    Mysql目录目录Mysqlmysql8.0.12winx64详细安装教程linuxmysql教程在Linux远程连接笔记中JDBC安装、使用JDBC安装JDBC使用三种执行对象:用于将SQL语句发送到数据库中createStatementStatementcreateStatement()创建一个Statement对象来将SQL语句发送到数据库。Statemen......
  • ubuntu linux安装MySQL后遇到的一些问题和解决方法
    Ubuntulinux安装MySQL后遇到的一些问题和解决方法版本信息ubuntu:Ubuntu24.04mysql:Ver8.0.36-2ubuntu3forLinuxonx86_64((Ubuntu))登陆安装后直接sudomysql就可以登陆分析为什么可以不用sudomysql-uroot-p呢?原因有三点直接执行mysql命令它是可以根据......
  • mysql基于linux环境下修改用户密码
    一、忘记密码的情况下:1、找到数据库配置文件my.cnf,不记得在哪可以全局搜索find/-name‘*my.cnf*’;2、vimy.cnf,在[mysqld]下面添加一行skip-grant-tables取消权限验证,保存退出;3、重启数据库:systemctlrestartmysql,也有可能是servicemysqldrestart;4、找到mysql安装目录,......
  • Mysql 之explain索引效率分析
    一、explain语句EXPLAIN[EXTENDED]SELECTselect_options二、字段分析1、idselect识别符。这是select的查询序列号,id的值越大优先级别越高,越先被执行,如果id相同,执行顺序右上至下2、select_typeselect_type表示select语句的类型。3、table表示这一行的数据是关于哪张......
  • docker搭建Elasticsearch、Kibana、Logstash 同步mysql数据到ES
    一、前言在数据量大的企业级实践中,Elasticsearch显得非常常见,特别是数据表超过千万级后,无论怎么优化,还是有点力不从心!使用中,最首先的问题就是怎么把千万级数据同步到Elasticsearch中,在一些开源框架中知道了,有专门进行同步的!那就是Logstash。在思考,同步完怎么查看呢,这时Kibana映入......
  • mysql+node.js前后端交互(简单实现注册登录功能)
    目录 sql文件 user.js注册部分  登录部分 对应的表操作usersql.js result.js用户提交的信息会进行格式化 ......