带回滚的Mysql嵌套事务

2024-04-11

有人可以告诉我是否可以从一个过程中调用另一个过程,并且如果任一过程的任何部分失败,则回滚所有内容?

如果这是可能的,有人可以向我展示一个如何实施的小例子吗?

EDIT:过程“b”失败,但过程“a”仍然向表“a”中插入一行。据我了解,如果插入的任何部分失败,则所有内容(两个插入)都会回滚,而这里不会发生这种情况。问题是为什么不呢?

程序“a”

BEGIN
  DECLARE b INT DEFAULT 0;
  DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
  DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;

  START TRANSACTION;
    INSERT INTO a(a)
    VALUES(iA);

     CALL b(iB,LAST_INSERT_ID(),@b);
     SELECT @b INTO b;

     IF b !=1 THEN
        ROLLBACK;
      ELSE
        COMMIT;
  END IF;
END

程序“b”

BEGIN
  DECLARE b INT DEFAULT 0;
  DECLARE EXIT HANDLER FOR SQLWARNING ROLLBACK;
  DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;

  START TRANSACTION;
    INSERT INTO b VALUES(iB,id);
    SET b=1;
  COMMIT;
END;

您将需要在两个过程中处理事务,但是调用另一个过程的过程应该检查返回值并据此回滚其事务。这是内部过程的示例:

如何检测MySQL存储过程的回滚? https://stackoverflow.com/questions/4076566/how-to-detect-a-rollback-in-mysql-stored-procedure

然后你会检查p_return_code并回滚父事务。

EDIT:

我认为正在发生的事情是内部 SP COMMIT 或 ROLLBACK 影响外部 SP TRANSACTION。这段代码对我有用,如果内部 SP 失败,它会回滚两个插入语句。第一次调用 ab() 有效,新的用户记录被插入,新的游戏记录被插入,如果我们从游戏表中删除记录并再次运行 ab() ,因为用户 ID 已经存在,它会回滚游戏表插入:

create procedure ab()
BEGIN
  START TRANSACTION;
    INSERT INTO games (title) VALUES ('bad game');
    CALL ba(@ret);
    IF @ret!=0 THEN
      ROLLBACK;
    ELSE
      COMMIT;
    END IF;
END;


create procedure ba(OUT return_value tinyint unsigned)
BEGIN
  DECLARE exit handler for sqlexception
  BEGIN
    set return_value = 1;
  END;

  INSERT INTO users (id) VALUES(1);
  set return_value = 0;
END;

测试使用call ab();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带回滚的Mysql嵌套事务 的相关文章

随机推荐

  • $(document).on 'ready page:load' - 在 ie10 中无法正常工作

    我正在 Rails 中开发 对于jquery 我使用coffeescript Turbolink 处于活动状态 我有一个问题 这让我很紧张 当我想启动我的函数 这里称为脚本 时 我使用以下代码 document on ready page
  • 当 iPhone 进入睡眠状态时,AVAudioPlayer 停止播放音频

    只要我的应用程序正在运行 我就需要一直播放背景声音 我尝试使用 AVAudioPlayer 来实现此目的 然而 一旦 iPhone 进入睡眠模式 它就会停止播放声音 你能让我知道如何解决这个问题吗 Thanks 您可能需要设置音频会话类别
  • 滚动所有嵌套滚动条以将 HTML 元素带入视图

    我无法理解它 该元素存在于多个可滚动 DIV 元素的嵌套层次结构中 而不是存在于单个可滚动文档窗口中 我头疼的问题之一是如何scrolled offsetParent is document body 颜色papayawhip在下面的测试代
  • 如何在 MATLAB 中保存高分辨率图形

    当我从 MATALB 保存图形时 我希望生成的图像具有非常高分辨率 以便我可以放大以查看图像中的细节 当我在图形上使用 文件 gt 另存为 时 图像的分辨率不高 如何在 MATLAB 中将图形保存为高分辨率图像 您可以从命令行或 文件 菜单
  • vbCrLF 或环境.NewLine

    我使用Environment NewLine 我的同事使用vbCrLf 当我为他们进行代码审查时 我想要一些我可以指出的东西来说明 使用Environment NewLine而不是vbCrLf 或者 我只是在风中撒尿 这并不重要吗 Envi
  • pygame.display.update() 错误:视频系统未初始化

    import pygame from pygame locals import def main global FPSCLOCK DISPLAYSURF BASICFONT PLAY SURF PLAY RECT NEW SURF NEW
  • 什么是“PHP 标准化”版本号字符串?

    我搜索了一个描述 PHP标准化 版本号字符串的网络资源 但我没有找到 有吗 我想知道如何编写有效的 PHP 标准化 版本 PHP standardized number format与描述页面相关的是语义版本控制 http semver o
  • BackgroundWorker 完成事件 - 哪个线程?

    BackgroundWorker 控件的已完成事件是否返回到 GUI 线程 或者我是否必须将其封送回来 另外 进度事件是否返回到 GUI 线程 或者我是否必须将其封送回来 这两个事件都将被编组到 UI 线程上
  • Rails - 具有 data-* 属性的 link_to 帮助器 [重复]

    这个问题在这里已经有答案了 可能的重复 将 html5 数据属性与 Rails content tag 帮助器一起使用的最佳方法 https stackoverflow com questions 4258512 best way to u
  • 使用 Spring Data JDBC 的嵌套数据结构

    我想创建一个嵌套的数据结构 Entity1包含类型的对象Entity2存储在地图中 Entity2应该包含一个对象的映射Entity3 第一部分 Entity1 and Entity工作正常 当我添加Entity3 发生异常 当我执行一个简
  • 如何在 php/mysql Web 应用程序中实现悲观锁定?

    如何在 php mysql Web 应用程序中实现悲观锁定 网络用户打开一个页面来编辑一个数据集 行 网络用户单击 锁定 按钮 因此其他用户可以读取但不能写入此数据集 网络用户进行一些修改 可能需要 1 到 30 分钟 网络用户单击 保存
  • 如何在 watir 的 webdriver-user-agent gem 中传递 Chrome 选项

    我正在尝试使用 Watir gem 传递 Chrome Drive 的 cookies 选项 从 Watir 文档我可以做Watir Browser new chrome opts 所以对于cookie我可以这样做 browser Wati
  • Android FAB setBackgroundTintList 与 ColorStateList 不起作用

    我想在未启用 NFC 时更改 NFC 扫描 FAB 的颜色 我已成功在应用程序启动时更改颜色 但如果用户点击 FAB 并启用 NFC 颜色不会更改为原色 日志显示确实如此 但更改并未发生 My minSdkVersion 15 XML
  • Node.js 请求库的相对 uri

    我有以下代码 node js 无法解析 url const request require request const teamURL users user id teams const req request url teamURL js
  • 类“QueryParameterComparer”必须实现函数比较。

    我在下面从 C 转换为 VB NET 的代码中遇到以下错误 原始代码可以在此处找到 https developer linkedin com sites default files LinkedInAuth rar zip https de
  • 带有 android:priority 设置的意图过滤器

    我测试了意图过滤器android priority 0 和意图过滤器android priority 20 by android intent category HOME 我列出以下信息
  • 变量中的 JavaScript 反斜杠 (\) 导致错误

    在 Javascript 中 当我在某些变量中添加反斜杠时 例如 var ttt aa var ttt aa JavaScript 显示错误 如果我尝试限制用户输入此字符 我也会收到错误 aaa indexOf 1 限制用户输入中的反斜杠并
  • 如何更改 Xamarin 中的章节标题字体样式?

    我有这个列表视图 但我不知道如何设置部分标题的样式 在 Xamarin 中如何实现 还没有找到任何东西
  • OpenCV 中是否可以将局部曲率绘制为代表对象“指向性”的热图?

    给定一个可以检测并绘制轮廓的斑点阈值图像 在绘制轮廓时是否可以将局部曲率表示为热图 即是否 1 可以确定开放 cv 轮廓上的局部曲率 2 将此曲率映射到热图颜色空间 3 将轮廓绘制为热图 我的目标是测量对象的 尖度 以便我可以绘制从尖头侧到
  • 带回滚的Mysql嵌套事务

    有人可以告诉我是否可以从一个过程中调用另一个过程 并且如果任一过程的任何部分失败 则回滚所有内容 如果这是可能的 有人可以向我展示一个如何实施的小例子吗 EDIT 过程 b 失败 但过程 a 仍然向表 a 中插入一行 据我了解 如果插入的任