• 二十四、MySQL事务操作演示


    1、事务

    (1)事务简介:

    (2)实际操作方式:

            在执行MySQL语句时,系统默认自动提交,但是语句一旦出现报错,就可能导致数据出现大规模错误,所以我们要做的就是,将自动提交方式改为手动提交方式。

            在改为手动提交之后,如果执行语句出现错误,数据库数据也不会发生更改,需要操作者确认提交,数据库数据才会发生更改。

    (3)查看当前提交方式:

    1. 查看当前提交方式:
    2. select @@autocommit;

    2、操作案例:

            建立一个数据库,存放着jom和kom的存款数据,jom存款10000元,kom存款5000元,现在jom给kom转账1000元,执行操作语句如下:

     3、修改提交方式(方式一)

    (1)错误语句:

    此时为自动提交方式:

            在这个错误语句中,第三条SQL语句不能正常执行,但前两条语句已经执行,这将导致jom的账户余额变为9000元,kom的账户余额不会发生改变。

    (2)手动提交:

            在(1)中,这样的错误是十分致命的,这将会导致数据的严重缺失,所以将提交方式设置为手动提交是必要的。

    1. 将提交方式设置为手动提交
    2. set @@autocommit=0;

    (3)手动提交示例:

            执行如下语句:

    1. select * from account where name='jom';
    2. update account set money=money-1000 where name='jom';
    3. update account set money=money+1000 where name='kom';

            再次执行(1)中错误语句之后,然后再去刷新数据库,发数据库的数据并不会发生改变,这时需要执行commit;语句,数据才会发生改变。

    1. 提交数据:
    2. commit

            执行结果:

    (4)回滚操作:

    回滚语句:

    1. 回滚操作:
    2. rollback;

     

    4、修改提交方式(方式二) 

    (1)手动提交:

    (2) 提交方式:

    在这种提交方式中,不需要设置commit参数,只需要执行如下语句即可:

    1. # 第一步,开启事务
    2. start transaction ;

    (3)实际操作:

    1. # 方式二:
    2. # 第一步,开启事务
    3. start transaction ;
    4. # 第二部,执行指令
    5. select * from account where name='jom';
    6. update account set money=money-1000 where name='jom';
    7. 程序执行报错 ...
    8. update account set money=money+1000 where name='kom';
    9. select @@autocommit;
    10. # 第三步,提交事务
    11. commit;
    12. # 第四步,回滚事务,结束当前事务
    13. rollback;

  • 相关阅读:
    Debezium Mysql BinLog同步引擎的内存爆满,频繁GC导致CPU爆高
    秋招如何准备?有什么建议?
    chrome 中一个坑DIE的设置 | getUserMedia is not implemented in this browser解决办法
    vue知识点--vuex+映射
    代碼隨想錄算法訓練營|第四十一天|第九章 动态规划 理论基础 、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯。刷题心得(c++)
    无人机还能“独立思考”,他们做到了...
    Promise期约函数的实现
    Arcface部署应用实战
    每天几道Java面试题(第一天)
    第一个MVC程序(配置版)
  • 原文地址:https://blog.csdn.net/2301_79149013/article/details/133241233