MySQL事务

举报
bug郭 发表于 2022/08/11 09:58:49 2022/08/11
【摘要】 事务事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end ransaction语句(或函数调用)来界定。事务由事务开始(begintransaction)和...

事务

事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end ransaction语句(或函数调用)来界定。事务由事务开始(begintransaction)和事务结束(end transaction)之间执行的全体操作组成。(百度)

简单讲事务就是MySQL多条操作封装在一起,成为一个事务!!!

也就是多条sql语句就可以组成一个事务!

为什么使用事务

有些MySQL操作,不得不需要多条sql才能执行成功!

比如我们需要转账操作!
显然这样的操作,在mysql需要分两步执行!!!

假设:阿里巴巴需要给四十大盗转账2000元!!
在这里插入图片描述
第一步:
阿里巴巴账户余额减少2000!
在这里插入图片描述

第二步:
四十大盗账户余额增加2000
在这里插入图片描述

如果我们的第一步操作就失败了!显然此时转账失败了!
我们第二步的操作就没有意义了!
所以我们需要将这两个操作打包成一个事务!
如果sql_1执行成功了,那么再执行sql_2!

那如果sql_1执行失败了咋整呢?
放心,我们的mysql数据库有专门的表记录下了sql_1操作,数据库系统会自动将该操作回滚即复原!!!

事务特性:

四大特性:

  • 原子性
    因为我们通常认为原子是不可再分的,这里就是认为事务是最小单元了!
  • 一致性
    就刚刚的转账操作,账户1和账户2中的余额总数要和转账前相同,不能无故增加或减少!!!
  • 隔离性
    多个事务并发之间是隔离的!
    就是当,双方转账的同时,另一方再转账给其中一人,那么此时就不可执行!
  • 持久性
    执行该条事务后,如果不进行二次更改,那么该数据就持久有效了!

使用

如何设置执行一个事务呢?

  • 开启事务
    sql语句
    start transaction;
  • 执行多条sql
  • 回滚或提交:
    sql语句
    rollback/commit;
    rollback即是全部失败,commit即是全部成功。
    在这里插入图片描述
    commit事务提交成功!!
    在这里插入图片描述
    rollback撤销该事务

并发执行事务可能带来的问题(面试)

我们知道事务有隔离性的特点!!!
我们知道隔离性越好,那么事务之间的并发性就低!!!

什么是并发执行呢?
我们知道我们的计算机可以同时开启多个进程(程序)!
我们可以听着歌,打开IDEA,打开CSDN写博客!!!
我们计算机是很擅长一心多用!!多个进程并发执行!!!
而如今的计算机CPU也是取向多核发展!!
就是同时并发执行的程序可以更多!!

而事务间也有并发!

联系我们生活,很多事情我们可以同时并发执行!但是有些事情需要先后顺序执行,不然会很多问题!!
事务并发也是如此,有可能出现一些问题!

  • 脏读问题

什么是脏读呢?
顾名思义就是读了一个脏数据!就是错误的数据!!

什么情况下会出现脏读呢?

比如高中,考了考试,你正在订正答案,学委在黑板上抄答案,你在你的试卷上改!他写,你抄.你抄完后,发现学委把答案改了,他刚刚抄错答案了! 你刚刚读的答案就是一个脏数据!!!

我们画一个时间轴便于理解!!!
在这里插入图片描述解决方案:
我们可以对写操作进行加锁!!!便可以处理脏读问题!!!

就是说我们等学委将答案全部抄完! 我们再进行读答案!!!
在这里插入图片描述

  • 不可重复读

当我们学委写完答案,你开始抄答案不久时间后,老师和他说有一个答案有更好的解法!让学委重新写一份!可这时你已经在抄了好多了!你就一整个大无语!!!

在这里插入图片描述
解决方案:
给读操作加锁!

我们和学委商量,他写答案的时候我们不看!我们抄答案的时候他就不可以改了!!!
在这里插入图片描述

  • 幻读问题

当学委写完数学答案后,我们再看数学答案时,他又在写英文答案,此时你就看岔行了!把英文答案看成了数学答案抄了,出现了幻读问题!!!

在这里插入图片描述
解决方案:
再次和学委商量,咱抄答案时他不能写!!!我们抄时他不能写!!!

使读和写操作直接串行化了!!!

显然此时的隔离效果最后!! 但是并发最慢!!!

隔离性和并发两者需要平衡!!!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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