MySQL高级【事务】第十章

举报
爱吃豆的土豆 发表于 2022/09/25 03:37:52 2022/09/25
【摘要】 目录 💂 个人主页: 爱吃豆的土豆 🌈欢迎加入社区,福利多多哦!土豆社区 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 🏆人必有所执,方能有所成! 🐋希望大家多多支持😘一起进步呀! 事务 ...

目录

  • 💂 个人主页: 爱吃豆的土豆
  • 🌈欢迎加入社区,福利多多哦!土豆社区

  • 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
  • 🏆人必有所执,方能有所成!

  • 🐋希望大家多多支持😘一起进步呀!

事务

概述

语法

代码验证

事务的四大特征


事务

概述

数据库的事务(Transaction)是一种机制、一个操作序列,包含了==一组数据库操作命令==。

事务把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令==要么同时成功,要么同时失败==。

事务是一个不可分割的工作逻辑单元。

这些概念不好理解,接下来举例说明,如下图有一张表

张三和李四账户中各有100块钱,现李四需要转换500块钱给张三,具体的转账操作为

  • 第一步:查询李四账户余额

  • 第二步:从李四账户金额 -500

  • 第三步:给张三账户金额 +500

现在假设在转账过程中第二步完成后出现了异常第三步没有执行,就会造成李四账户金额少了500,而张三金额并没有多500;这样的系统是有问题的。如果解决呢?使用事务可以解决上述问题

​ 

 从上图可以看到在转账前开启事务,如果出现了异常回滚事务,三步正常执行就提交事务,这样就可以完美解决问题。

语法

  • 开启事务

    
        
    1. START TRANSACTION;
    2. 或者  
    3. BEGIN;

  • 提交事务

    commit;
  • 回滚事务

    rollback;

代码验证

  • 环境准备

    
        
    1. DROP TABLE IF EXISTS account;
    2. -- 创建账户表
    3. CREATE TABLE account(
    4. id int PRIMARY KEY auto_increment,
    5. name varchar(10),
    6. money double(10,2)
    7. );
    8. -- 添加数据
    9. INSERT INTO account(name,money) values('张三',1000),('李四',1000);

  • 不加事务演示问题

    
        
    1. -- 转账操作
    2. -- 1. 查询李四账户金额是否大于500
    3. -- 2. 李四账户 -500
    4. UPDATE account set money = money - 500 where name = '李四';
    5. 出现异常了...  -- 此处不是注释,在整体执行时会出问题,后面的sql则不执行
    6. -- 3. 张三账户 +500
    7. UPDATE account set money = money + 500 where name = '张三';

    整体执行结果肯定会出问题,我们查询账户表中数据,发现李四账户少了500。

添加事务sql如下:


  
  1. -- 开启事务
  2. BEGIN;
  3. -- 转账操作
  4. -- 1. 查询李四账户金额是否大于500
  5. -- 2. 李四账户 -500
  6. UPDATE account set money = money - 500 where name = '李四';
  7. 出现异常了... -- 此处不是注释,在整体执行时会出问题,后面的sql则不执行
  8. -- 3. 张三账户 +500
  9. UPDATE account set money = money + 500 where name = '张三';
  10. -- 提交事务
  11. COMMIT;
  12. -- 回滚事务
  13. ROLLBACK;

 上面sql中的执行成功进选择执行提交事务,而出现问题则执行回滚事务的语句。以后我们肯定不可能这样操作,而是在java中进行操作,在java中可以抓取异常,没出现异常提交事务,出现异常回滚事务。

事务的四大特征

  • 原子性(Atomicity): 事务是不可分割的最小操作单位,要么同时成功,要么同时失败

  • 一致性(Consistency) :事务完成时,必须使所有的数据都保持一致状态

  • 隔离性(Isolation) :多个事务之间,操作的可见性

  • 持久性(Durability) :事务一旦提交或回滚,它对数据库中的数据的改变就是永久的==说明:==

mysql中事务是自动提交的。

也就是说我们不添加事务执行sql语句,语句执行完毕会自动的提交事务。

可以通过下面语句查询默认提交方式:

SELECT @@autocommit;

查询到的结果是1 则表示自动提交,结果是0表示手动提交。当然也可以通过下面语句修改提交方式

set @@autocommit = 0;

文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。

原文链接:qianxu.blog.csdn.net/article/details/126462616

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。