【日常经验】Mysql中的某个存储过程中如果有查数据,存数据和删除数据,会自动在一个事务中吗

embedded/2024/11/22 21:15:16/

在 MySQL
中,存储过程中的查数据(SELECT)、存数据(INSERT/UPDATE)和删除数据(DELETE)操作不会自动在一个事务中执行。默认情况下,MySQL
对每条单独的 SQL 语句都视为一个独立的事务(如果自动提交模式开启的话)。这意味着,如果存储过程中的某个 SQL
语句执行失败,之前已经执行成功的 SQL 语句并不会自动回滚。

为了确保存储过程中的多个操作保持原子性,即要么全部成功,要么全部失败,你需要在存储过程中显式地使用事务控制语句。这通常包括以下几个步骤:

  • 关闭自动提交:在存储过程的开始,你可以使用 SET AUTOCOMMIT = 0; 语句来关闭自动提交模式。这样,MySQL 就不会在每条 SQL 语句执行后自动提交事务。
  • 开始事务:使用 START TRANSACTION; 或 BEGIN; 语句来显式地开始一个事务。这标志着事务的起点。
  • 执行 SQL 操作:在事务中执行你需要的 SQL 操作,包括查询、插入和删除等。
  • 提交或回滚事务:
    如果所有操作都成功执行,使用 COMMIT; 语句来提交事务,使更改永久保存到数据库中。
    如果发生错误或异常,使用 ROLLBACK; 语句来回滚事务,撤销所有已经执行的更改。
  • 恢复自动提交(可选):在存储过程的结尾,你可以使用 SET AUTOCOMMIT = 1; 语句来恢复自动提交模式,但这通常不是必需的,因为存储过程结束后,其上下文也会被销毁。
    下面是一个示例存储过程,展示了如何使用事务控制语句来确保多个操作的原子性:
DELIMITER //CREATE PROCEDURE MyAtomicStoredProcedure()
BEGINDECLARE EXIT HANDLER FOR SQLEXCEPTIONBEGIN-- 在发生异常时回滚事务ROLLBACK;END;-- 关闭自动提交SET AUTOCOMMIT = 0;-- 开始事务START TRANSACTION;-- 查询数据(通常不需要回滚,但这里为了完整性展示)SELECT * FROM my_table WHERE some_column = 'some_value';-- 插入数据INSERT INTO my_table (column1, column2) VALUES ('value1', 'value2');-- 删除数据DELETE FROM my_table WHERE another_column = 'another_value';-- 提交事务(如果没有异常发生)COMMIT;-- 注意:在存储过程结束时,自动提交模式通常不需要显式恢复,因为存储过程上下文会被销毁-- 但为了清晰起见,你也可以在这里加上 SET AUTOCOMMIT = 1;
END //DELIMITER ;

在这个示例中,如果插入或删除操作失败,或者存储过程中发生了其他 SQL 异常,异常处理程序会被触发,并且事务会被回滚到开始状态。这样,就可以确保存储过程中的多个操作要么全部成功,要么全部失败,从而保持原子性。


http://www.ppmy.cn/embedded/139709.html

相关文章

基于51单片机的电子钟+秒表LCD1602仿真设计

电子钟秒表 0. 设计资料内容清单&&下载链接1. 主要功能:2. 讲解视频:3. 仿真4. 程序代码5. 设计报告6. 原理图 基于51单片机的电子钟秒表LCD1602仿真设计( proteus仿真程序设计报告原理图讲解视频) 仿真图proteus7.8及以上 程序编译…

【Memcached】基本命令Linux端

前言 嗯!Memcached要和Redis一样熟练才行!偷偷讲,都不熟练,真是拉胯的我~ 正文 Linux安装Memcached就下次讲吧!今天主要一些简单命令,其实记得,但是感觉不熟练,总要再三确认是否真的…

H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连

EasyPlayer.js无插件H5播放器属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,无须安装任何插件,起播快、延迟低、兼容性强,使用非常便捷。 EasyPlayer.js播放器不仅支持H.264与H.265视频编码格式&#x…

LeetCode 3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n))

【LetMeFly】3244.新增道路查询后的最短距离 II:贪心(跃迁合并)-9行py(O(n)) 力扣题目链接:https://leetcode.cn/problems/shortest-distance-after-road-addition-queries-ii/ 给你一个整数 n 和一个二维…

甲骨文云服务器 (Oracle Cloud) 终极防封、防回收的教程!

1.WindTerm 远程终端连接器:【官方下载】、【备用下载 】 2.AA面板:【安装脚本】 3.开启端口: sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -F 4.WordPress&#xf…

241117学习日志——[CSDIY] [ByteDance] 后端训练营 [05]

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…

电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现

电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现 电解车间铜业机器人剥片技术是现代铜冶炼过程中自动化和智能化的重要体现,它主要应用于铜电解精炼的最后阶段,即从阴极板上剥离出纯铜的过程。以下是该技术的几个关键点&#xff…

Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画

Python Turtle召唤童年:喜羊羊与灰太狼之懒羊羊绘画 🐸 前言 🐸🐞往期绘画🐞🐋 效果图 🐋🐉 代码 🐉 🐸 前言 🐸 小时候,每次打开电视…