【面试题】谈谈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之前读到的数据就变成了无效数据,这种情况就称为“脏读”,于是可以进行”写操作“加锁。

    不可重复读:即针对”写操作“进行加锁的情况下,依旧是两个事务针对同一份数据进行操作,在事务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.xdnf.cn/news/1113784.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx配置组成与性能调优

目录 一、Nginx配置介绍 1. 模块组成 2. 图示 3. 相关框架 二. 配置调优 1. 全局配置 1.1 关闭版本和修改版本 1.2 修改启动的进程数 1.3 cpu与work进程绑定 1.4 pid路径 1.5 nginx进程的优先级(work进程的优先级) 1.6 调试work进程打开的文…

大模型相关论文笔记

Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks 用于知识密集型NLP任务的检索增强生成 Facebook 2020 PDF CODE (论文代码链接已失效,以上是最新链接) 引言 大模型有幻觉问题(hallucinations)&…

web前端安全性——CSRF跨站请求伪造

承接上篇讲述的XSS跨站脚本攻击 跨站请求伪造(CSRF) 1、概念 CSRF(Cross-site request forgery) 跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注…

Python Web开发记录 Day1:HTML

名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、HTML1、前端引入和HTML标签①前端引入②浏览…

Stylized Trees and Foliage

程式化的树木和树叶为你的场景提供了各种各样的树木和灌木。 需要安装 Shader Graph,以便对大多数部分使用自定义着色器! 有多种材料和模块化选择。材料上有多种颜色的叶子,甚至有模块化的树创建,可以用提供的模块化预制件构建自己的树。 在演示场景中可以看到以下包:风格…

linux设备树:phandle和port

linux设备树:phandle和port 参考文档: https://elixir.bootlin.com/linux/v5.10.209/source/Documentation/devicetree/bindings/graph.txt https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/rockchip/roc…

⭐北邮复试刷题LCR 018. 验证回文串__双指针 (力扣119经典题变种挑战)

LCR 018. 验证回文串 给定一个字符串 s ,验证 s 是否是 回文串 ,只考虑字母和数字字符,可以忽略字母的大小写。 本题中,将空字符串定义为有效的 回文串 。 示例 1: 输入: s “A man, a plan, a canal: Panama” 输出: true 解释…

C#通过继承泛型类来分块显示学生的个人信息以及成绩信息

目录 一、涉及到的知识点 1.泛型类的继承 2.泛型类的可视化 (1)用UML图说明泛型类的可视化 (2)用实例说明泛型类的可视化 二、实例1 1.源码 2.生成效果 三、实例2 再发一个继承泛型类的应用案例。 一、涉及到的知识点 …

openEuler安装MySQL客户端、openEuler安装MySQL-client、openEuler部署MySQL-client

MySQL客户端下载链接:https://downloads.mysql.com/archives/community/ mysql-community-client-5.7.30-1.el7.x86_64.rpm mysql-community-common-5.7.30-1.el7.x86_64.rpm mysql-community-libs-5.7.30-1.el7.x86_64.rpm 3个必选 8.0.22以上的版本是4个&…

Facebook的未来蓝图:数字社交的下一个篇章

在数字化时代,社交媒体已经成为人们日常生活中不可或缺的一部分。而在众多的社交媒体平台中,Facebook一直处于领先地位,不断探索着数字社交的新领域和新形式。随着科技的不断发展和社会的不断变革,Facebook正在谱写着数字社交的未…

好书推荐| After Effects 2022案例实战全视频教程

After Effects 2022案例实战全视频教程 作者 :王红卫 书号:9787302631958 定价:99元 出版时间:2023年7月 作者介绍 王红卫 拥有多年设计师的经学经验,北京理工大学百事特教师,水木风云工作室创始人&a…

libgdx摄像头的移动

概述:要知道,做一个游戏,摄像头是必不可少的。接下来,我将讲解libgdx里面摄像头的移动 2d摄像头OrthographicCamera也叫做正交相机 结果展示: 按上下左右是可以移动的 OrthographicCamera camera的使用&#xff1a…

合纵连横 – 以 Flink 和 Amazon MSK 构建 Amazon DocumentDB 之间的实时数据同步

在大数据时代,实时数据同步已经有很多地方应用,包括从在线数据库构建实时数据仓库,跨区域数据复制。行业落地场景众多,例如,电商 GMV 数据实时统计,用户行为分析,广告投放效果实时追踪&#xff…

63-JQuery语法,选择器,事件,方法,遍历循环each,attr(),.prop()

1.一个JS库,用js封装很多的方法放到一个文件里面,直接拿了用就可以 文件名带min是压缩过的不带min是没压缩过的 2.JQuery语法 通过选取HTML元素,并对选取的元素执行某些操作 基础语法:$(selector).action() <!-- 需要把JQuery文件先引入才能用 --><script src…

ICRA 2024:UC伯克利、斯坦福大学等共同开发机器人强化学习套件(SERL),20分钟学会装配电路板!

近年来&#xff0c;机器人强化学习技术领域取得显著的进展&#xff0c;例如四足行走&#xff0c;抓取&#xff0c;灵巧操控等&#xff0c;但大多数局限于实验室展示阶段。将机器人强化学习技术广泛应用到实际生产环境仍面临众多挑战&#xff0c;这在一定程度上限制了其在真实场…

智慧社区的魔力:数据可视化的引领之力

在迅猛发展的科技时代&#xff0c;数据可视化作为一种强大的工具&#xff0c;为智慧社区的建设提供了无限可能。它不仅改变了我们对信息的获取方式&#xff0c;更为社区管理、居民生活等方面注入了新的活力。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 数据可…

【招聘】资深后端开发工程师-飞书IM(杭州、北京)

职位描述 团队介绍&#xff1a;飞书是字节跳动旗下先进企业协作与管理平台&#xff0c;围绕目标、信息与人三个维度全方位助力组织升级。一站式整合即时沟通、日历、音视频会议、文档、云盘、邮箱等办公协作套件&#xff0c;让组织和个人工作更高效更愉悦。飞书目前已服务包括互…

python52-Python流程控制if分支之不要忘记冒号

从Python语法解释器的角度来看&#xff0c;Python冒号精确表示代码块的开始点&#xff0c;这个功能不仅在条件执行体中如此&#xff0c;后面的循环体、方法体、类体全都遵守该规则。 如果程序遗忘了冒号&#xff0c;那么Python解释器就无法识别代码块的开始点。例如如下程序。…

java内存详解

内存&#xff1a;可理解为“内存条”&#xff0c;所有软件在程序运行时都会进入到内存中 内存划分&#xff08;5块&#xff09; ① 栈&#xff08;Stack&#xff09; 主要运行方法&#xff0c;方法执行完毕会弹栈&#xff0c;释放空间 ② 堆&#xff08;Heap&#xff09; a.主…

Mysql第三关之事务、锁、高可用

简介 本章较深入探索Mysql核心机制&#xff0c;Innodb引擎架构&#xff0c;MVCC多版本并发控制、事务支撑、各种级别的锁、Mysql高可用设计等概括梳理。 Mysql组成架构 图片来自网络 在Mysql架构设计中&#xff0c;大概可以分为Mysql server层和存储引擎层。 Server层 s…