• MySQL事务基本操作(方式2)


    首先 你要了解 将事务改为手动提交 并控制事务的方式 如果不了解 可以先查看我的文章
    MySQL事务基本操作(方式1)

    然后我们来看表结构

    我们有一张 staff 用户表
    在这里插入图片描述
    然后我们将 黄飞鸿 转10年时间给赵敏 简单说 逻辑有四个

    第一步 查看黄飞鸿的年龄 确认他加十年不会超额
    第二步 将黄飞鸿年龄加十岁
    第三步 参看赵敏年龄不能小于10 不然减了就没了
    第四步 将赵敏的年龄减十岁

    但这个可能就会出现 黄飞鸿的年龄加了 赵敏的年龄没减 如果出现这种异常 那就出大事了 所以我们需要绑定事务
    让这几步操作 要么一起成功 要么一起失败

    接下来 我们来看手动事务控制的代码

    在这里插入图片描述
    这里 我们先将数据库的事务提交状态调回去 执行

    set @@autocommit = 1;
    
    • 1

    在这里插入图片描述
    我们的程序就执行成功了

    然后我们查询一下

    select @@autocommit;
    
    • 1

    我们现在查询到的状态就是 1 自动提交了
    在这里插入图片描述
    然后我们来通过手动开启事务的方式 完成上述逻辑

    我们先执行

    start transaction;
    
    • 1

    开启一个事务
    然后我们再来执行事务中要进行的操作

    select age from staff where name = "黄飞鸿";
    UPDATE staff SET age = age + 10 WHERE name = "黄飞鸿";
    select age from staff where name = "赵敏";
    UPDATE staff SET age = age - 10 WHERE name = "赵敏";
    
    • 1
    • 2
    • 3
    • 4

    然后我们查看表数据
    在这里插入图片描述
    可以看到 我们的数据还没有改变 因为事务操作还没有提交 数据不会发生真正的变化 只是存在了一个暂时的数据库里

    如果事务没有报错 那就可以执行

    commit;
    
    • 1

    把事务提交了 再去查看表数据
    在这里插入图片描述
    可以看到 我们的数据结构就完成了

    如果sql报错了 就 可以执行

    rollback;
    
    • 1

    回滚事务 这样就相当于什么都没发生过

  • 相关阅读:
    MPLS综合实验
    C# OpenCvSharp Yolov8 Detect 目标检测
    漫谈计算机网络:番外篇 ------网络安全相关知识——>公钥与私钥、防火墙与入侵检测
    初识RabbitMQ
    Vue ElementUi 校验邮箱手机号--大全
    LeetCode Cookbook 链表习题 上篇
    softmax冗余性,上下溢出,max(x)
    深度学习基础之GFLOPS(2)
    Autosar模块介绍:AutosarOS(5)
    Django 模板语法-传值、取值
  • 原文地址:https://blog.csdn.net/weixin_45966674/article/details/127716568