【面试题】谈谈MySQL的事务

事务是啥

MySQL的事务就是把多个sql语句操作打包在一起执行,要么全部执行,要么一个都别执行。这种操作称为“原子性”,是事务最核心的特征。当某个sql操作出错时,就会进行“回滚/rollback”操作,即把执行过的操作逆向恢复回去,数据库会把每个操作记录下来,当某个操作出错时,就会把之前的操作进行逆操作,比如前面是删除操作,逆操作就进行插入操作,把删除的数据重新插入回去。

start transaction;--开启事务
--
--中间写多个sql
--
commit;--提交事务

当开启事务后不会立即执行sql操作,会等到commit提交事务后,会统一执行多个sql。

事务的四大特性

  1. 原子性:即把多个sql操作合并在一起(相当于一个操作),统一执行,要么都执行成功,要么一个都别执行。

  2. 一致性:即事务执行前后,数据都是合法的。

  3. 持久性:即事务的操作后的结果都会写入硬盘,无论是程序还是主机重启,修改操作都是生效的。

  4. 隔离性:即同一个数据库服务器,在针对多个事务并发执行时,事务之间相互影响的程度。隔离性越高,并发程度越低,执行效率越慢,反之隔离性越低,并发越高,效率越快。隔离性分为四个档位,分别是:

    • read uncommited 读未提交:这个档位MySQL不做任何限制,隔离性最低,并发程度最高,执行效率最快,此时存在“脏读、不可重复读、幻读”问题。像博客文章点赞数量这种操作就可以使用这个档位,因为不管点赞是重复了还是没点赞成功,问题都不大,效率快就行。
    • read commited 读已提交:这个档位是针对“写操作”加锁,此时隔离性提高,并发程度降低,执行效率降低,此时解决了”脏读“问题,存在”不可重复读、幻读“问题。
    • repeatable read 可重复读:Mysql的默认档位,此时针对“写操作”和“读操作”都进行加锁,此时隔离性进一步提高,并发程度进一步降低,此时解决了“脏读、不可重复读”,依旧存在“幻读”问题。
    • serializable 串行化:这个档位是严格执行串行化的,即放弃并发,隔离性最高,执行效率最慢,解决了“脏读、不可重复读、幻读”问题。

    脏读:即一个事务读了一个脏数据,比如此时有两个事务针对同一份数据进行操作。事务A在读数据,事务B在往这份数据里写东西,当事务A读完之后走了,事务B把这份数据修改并保存提交了,此时事务A之前读到的数据就变成了无效数据,这种情况就称为“脏读”,于是可以进行”写操作“加锁,即在“写操作”时,事务A不能读数据。

    不可重复读:即针对”写操作“进行加锁的情况下,依旧是两个事务针对同一份数据进行操作,在事务B针对这份数据进行”写操作“时,事务A是不能进行”写操作”的,但是可以读这份文件。于是事务A在读同一份数据时,事务B随即修改了数据,导致事务A读了一半发现数据变了,这种情况就称为“不可重复读”问题,即同一个事务针对一份文件连续读两次的结果不一致,于是需要针对”读操作“进行加锁。

    幻读:在“写操作”和“读操作”都进行加锁的情况下,事务A进行读数据(文件)时,事务B不能针对同一份文件进行“读写”操作,不过事务B可以针对其他文件进行操作,比如增加一个文件,或者删除一个文件,于是当事务A读完一个文件后,发现文件的数量变了,这种情况就称为“幻读”问题。即同一个事务连续两次读的结果集不同,于是需要严格执行串行化,即放弃并发。

栗子:
【脏读】比如学校黑板报,同学A早上10点来看黑板报发现自己考试成绩第一名,高兴的回到寝室;随后10:30学生B过来把黑板报给改了,漏了一名同学的成绩,此时同学A真实排名是第三名,不过同学A依旧以为自己是第一名,这种情况就属于是“脏读问题”。【不可重复读】同学A在读第一块黑板报,同学B紧接把黑板报的内容改了,导致同学A此时发现读的内容已经变了,这种情况就属于是”不可重复读“,不可重复读是同学A能立马发现内容变了,而脏读是同学A不能发现内容变了。【幻读】同学A此时在读黑板报,目前只有一个黑板报有内容,当同学A读完这个黑板报后就应该算是读完了黑板报,但是当同学A读完之后,发现旁边几块黑板报被同学B都写上了内容,此时导致同学A发现不再是只有一块黑板报有内容,而是有好几块,这种情况就是“幻读”。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/696561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

文章目录 一、索引概述二、索引结构三、结构 - B-Tree四、结构 - BTree五、结构 - Hash六、索引分类七、索引语法1.案例代码 八、SQL性能分析1.查看SQl执行频率2.慢查询日志3.PROFILES详情4.EXPLAIN执行计划 九、 索引使用规则十、SQL 提示十一、覆盖索引十二、前缀索引十三、单…

滚动加载react-infinite-scroll-component

react-infinite-scroll-component 当请求数据量过大时,接口返回数据时间会很长,数据回显时间长,Dom 的渲染会有很大的性能压力。 antd的List组件中有提到一个滚动加载的组件库react-infinite-scroll-component 实现滚动加载 Antd&#xff1…

考研高数(高阶导数的计算)

1.归纳法 常见高阶导数 2.泰勒展开式 3.莱布尼兹公式 4.用导数定义证明导函数在某一点连续的例题

【kubernetes】二进制部署k8s集群之cni网络插件flannel和calico工作原理(中)

↑↑↑↑接上一篇继续部署↑↑↑↑ 目录 一、k8s集群的三种接口 二、k8s的三种网络模式 1、pod内容器之间的通信 2、同一个node节点中pod之间通信 3、不同的node节点的pod之间通信 Overlay Network VXLAN 三、flannel网络插件 1、flannel插件模式之UDP模式&#xff0…

java对象所占内存大小输出

如何计算java对象所占内存大小&#xff0c;可以使用下述三种方法。 使用jdk8自带API 使用下面语句打印对象所占内存大小&#xff1a;需要保证jdk版本是jdk8。System.out.println(ObjectSizeCalculator.getObjectSize(3L)); 借助org.apache.lucene工具类 引入maven坐标 <…

2024/2/22

P8680 [蓝桥杯 2019 省 B] 特别数的和 题目描述 小明对数位中含有 2、0、1、9 的数字很感兴趣&#xff08;不包括前导 00&#xff09;&#xff0c;在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40&#xff0c;共28 个&#xff0c;他们的和是574。 请问&#xff0c;在…

【2024软件测试面试必会技能】

Unittest(5)&#xff1a;unittest_忽略用例 忽略用例 在执行测试脚本的时候&#xff0c;可能会有某几条用例本次不想执行&#xff0c;但又不想删也 不想注释&#xff0c;unittest通过忽略部分测试用例不执行的方式&#xff0c;分无条件忽略和有条 件忽略,通过装饰器实现所描述…

Vue3+vite搭建基础架构(11)--- 菜单栏功能和Tab页功能实现

Vue3vite搭建基础架构&#xff08;11&#xff09;--- 菜单栏功能和Tab页功能实现 说明删除项目中不需要的文件userStore全局属性代码菜单栏代码Tab页代码解决浏览器输入地址时不会打开tab页问题和切换tab页时参数丢失问题 说明 这里记录下自己在Vue3vite的项目使用less来写样式…

低代码开发——企业转型的万金油

在数字化时代&#xff0c;企业面临着日新月异的市场环境和激烈的竞争压力。为了在这场变革中脱颖而出&#xff0c;企业需要不断优化业务流程、提升创新能力&#xff0c;以及实现敏捷响应。在这个过程中&#xff0c;低代码开发作为一种创新性的技术手段&#xff0c;正成为企业转…

统信UOS_麒麟KYLINOS上监控网络:探索Smokeping的强大功能

原文链接&#xff1a;统信UOS|麒麟KYLINOS上监控网络&#xff1a;探索Smokeping的强大功能 在当今的网络环境中&#xff0c;无论是个人用户还是企业用户&#xff0c;都非常重视网络的稳定性和连通性。特别是在进行远程工作、在线会议、云计算等活动时&#xff0c;网络质量直接影…

程序员必备技能----删库跑路大总结

删库跑路大总结&#xff0c;各个都是大杀器&#xff0c;破坏性太大&#xff0c;轻易不要尝试。 删除linux根目录&#xff0c;用户目录&#xff0c;其实还可以增加一个删除/etc。删除&#xff08;清除&#xff09;数据库。删除redis缓存和持久化文件。删除mongodb库。git push …

说一说Eclipse的项目类型和常用项目的区别

Eclipse在新建项目的时候有很多类型&#xff0c;包括Java project、Web project等等&#xff0c;如下&#xff1a; 那么这些项目类型有什么区别呢&#xff1f;我们在创建项目的时候应该如何选择&#xff0c;了解清楚这一点还是非常重要的&#xff0c;但记住一个出发点&#xff…

2.22 day3、4 QT

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示"登录成功”&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&…

读书笔记:《看电影学金融》

大空头 禁止做空可以延缓资产价格下降的过程&#xff0c;但是人为保护的高股价最终还是不能持续的。做空引入的空头买家&#xff0c;可以增加市场的流动性。住房价格指数期货使房地产的投资属性与住宅属性分离&#xff0c;降低因炒房而空置的房屋&#xff0c;降低房价。收益互…

【论文解读】Uncertainty Quantification of Collaborative Detection for Self-Driving

Uncertainty Quantification of Collaborative Detection for Self-Driving 摘要引言方法问题定义方法概览Double-M 实验结论 摘要 在联网和自动驾驶汽车(CAVs)之间共享信息从根本上提高了自动驾驶协同目标检测的性能。然而&#xff0c;由于实际挑战&#xff0c;CAV 在目标检测…

十九、图像的放缩和插值

项目功能实现&#xff1a;对一张图像进行放大和缩小操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 resizing.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class RESIZING { public:void resizing(Mat& image); };#pragma…

深度解析:用 Python 爬虫逆向破解 dappradar 的请求头加密 X-Api-Sk

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 逆向是爬虫工程师进阶必备技能,当我们遇到一个问题时可能会有多种解决途径,而如何做出最高效的抉择又需要经验的积累。本期文章将以实战的方式,带你详细地逆向分析 dappradar 网站请求头加密字段 X-Api-SK 的构造逻…

解决Edge浏览器,微博无法查看大图(Edge Image Viewer)

使用Edge浏览器浏览微博或其它带校验的图片时&#xff0c;会导致无法查看。 主要原因为Edge自带了一个Edge Image Viewer, 但是该图片查看器无法查看带校验数据的图片&#xff0c;所以导致查看时一片空白。 解决方法 地址栏输入 edge://flags/搜索 Edge Image Viewer选择 Disa…

HTML5 Canvas 限定文本区域大小,文字自动换行,自动缩放

<!DOCTYPE html> <html> <body><h1>HTML5 Canvas 限定文本展示范围、自动计算缩放字体大小</h1><div id"tips">0</div> <div id"content">良田千顷不过一日三餐广厦万间只睡卧榻三尺良田千顷不过一日三餐…