数据库SQL面经--第二弹

事物的ACID(基本要素)

  1. 原子性(Atomicity):事务是一个原子操作单元,要么全部执行成功,要么全部回滚到操作前的状态,不会停留在中间状态。
  2. 一致性(Consistency):事务执行前后,数据库从一个一致性状态转换到另一个一致性状态。在事务执行过程中,数据库的完整性约束不被破坏。
  3. 隔离性(Isolation):并发执行的多个事务之间相互隔离,每个事务在逻辑上都感觉不到其他事务的存在。事务的执行是相互独立的,不会相互干扰。
  4. 持久性(Durability):一旦事务提交,其对数据库的修改就是永久性的,即使在系统故障或重启时也能保持。

并行事物带来的问题

数据一致性问题:

  • 脏读(dirty read):一个事务读到另一个事务未提交的数据就叫做脏读。一个事务对一条记录做修改,在这个事务提交前是有可能随时回滚的,这些数据就是脏数据。
  • 不可重复读(non-repeatable read):在一个事务内多次读取同一条记录,前后结果不一样就叫做不可重复读。事务 A 多次查询同一行数据,在多次查询中间,事务 B 对该行数据进行了修改,事务 A 多次查询同一行的数据就会不一致。
  • 幻读(phantom read):在一个事务内按相同条件多次查询,前后结果集的数量不同就叫做幻读。事务 A 按 id>5 的条件进行多次查询,在多次查询中间,事务 B 插入了一条 id 为6的数据,事务 A 多次查询的结果集数量就会不同。

影响:

  • 脏读:读到其他事务未提交的数据
  • 不可重复读:前后读取数据不一致
  • 幻读:前后读取的结果集数量不同

MYSQL的隔离级别

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

MYSQL默认的隔离级别

MySQL 默认的隔离级别是可重复读(REPEATABLE READ)

不用序列化怎么解决幻读

  • 针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。
  • 针对当前读(select ... for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读,因为当执行 select ... for update 语句的时候,会加上 next-key lock,如果有其他事务在 next-key lock 锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。

什么是MVCC

多版本并发控制,数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,比对事务id并根据事物隔离级别去判断读取哪个版本的数据。

  • 事务版本号:事务每次开启前,都会从数据库获得一个自增长的事务ID,可以从事务ID判断事务的执行先后顺序。
  • 隐式字段:对于InnoDB存储引擎,每一行记录都有两个隐藏列trx_id、roll_pointer,如果表中没有主键和非NULL唯一键时,则还会有第三个隐藏的主键列row_id。

InnoDB中的锁

共享锁和排他锁

  • 共享锁(S Lock):读锁,允许事务读取数据
  • 排他锁(X Lock):也叫独占锁,写锁,允许事务删除或更新数据

如果事务获取了某个数据的共享锁,其他事务可以立即获得该数据的共享锁,这种情况叫锁兼容。如果事务获取了某个数据的共享锁或排他锁,其他事务想要获取该数据的排他锁,必须要等到该行的锁释放掉

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

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

相关文章

第08章_面向对象编程(高级)拓展练习(关键字:static,代码块,关键字:final,抽象类和抽象方法,接口,内部类,枚举类,注解,包装类)

文章目录 第08章_面向对象编程(高级)拓展练习01-关键字:static1、银行账户类2、图形类3、数组工具类4、二分查找5、二分查找6、素数7、阅读代码,分析运行结果8、阅读代码,分析运行结果 02-代码块9、阅读代码&#xff0…

rocketmq实现延迟队列思路探讨

大家好,我是了不起,专为小白解决痛点的了不起。 一、非任意时间 1、修改 在服务器端(rocketmq-broker端)的属性配置文件中加入以下行: messageDelayLevel1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h …

Vue高级(二)

3.搭建vuex环境 创建文件:src/store/index.js //引入Vue核心库import Vue from vue//引入Vueximport Vuex from vuex//应用Vuex插件Vue.use(Vuex)//准备actions对象——响应组件中用户的动作const actions {}//准备mutations对象——修改state中的数据const mutat…

No module named ‘fcntl‘

问题详情 (base) PS D:\yolov5-master_head> gunicorn -c gunicorn.py wsgi:app Traceback (most recent call last):File "<frozen runpy>", line 198, in _run_module_as_mainFile "<frozen runpy>", line 88, in _run_codeFile "C…

Mantle: A Programmable Metadata Load Balancer for the Ceph File System——论文泛读

SC 2015 Paper 元数据论文阅读汇总 问题 优化Ceph的元数据局部性和负载平衡。 现有方法 提高元数据服务性能的最常见技术是在专用的元数据服务器&#xff08;MDS&#xff09;节点之间平衡负载 [16, 25, 26, 21, 28]。常见的方法是鼓励独立增长并减少通信&#xff0c;使用诸…

中文 DarkVoxel Wiki | CSDN

DarkVoxel Wiki 游戏DarkVoxel的中文百科~ 欢迎来到DarkVoxel Wiki&#xff01; 本wiki于 2024/1/15 迁自 Fandom Wiki&#xff08;因为 Fandom 实在是太烂了&#xff09;以后wiki在这里更新&#xff0c;B站专栏只会发布每个版本的更新内容之类的简单资讯&#xff1b;相关视…

【物以类聚】给el-image预览多张图片增加提示文字,让每张图片有所分类

【物以类聚】给el-image预览多张图片增加提示文字&#xff0c;让每张图片有所分类 一、需求二、el-image三、实施步骤3.1 导包3.2 改造3.3 引入 三、效果 一、需求 点击地图上的一张图片&#xff0c;弹出所有相关的图片资源&#xff0c;图片资源上显示每个图片的所属类型。 二…

《产业结构调整指导目录(2024年本)》发布,模糊测试首次纳入

近日&#xff0c;第6次委务会议通过了新版的《产业结构调整指导目录&#xff08;2024年本&#xff09;》&#xff0c;该目录自2024年2月1日起正式实施。 与之前的版本相比&#xff0c;本次目录在行业设置上进行了全面升级&#xff0c;新增了“网络安全”这一重要行业大类&#…

金蝶云星空单据转换插件-选单

文章目录 金蝶云星空单据转换插件-选单 金蝶云星空单据转换插件-选单 选单使用标识报错 应该使用实体属性

Centos下,使用NFS实现目录共享/网络驱动器

Linux系统下&#xff0c;也可以像windows一样通过目录共享实现网络驱动器模式访问。具体操作步骤如下&#xff1a; 一、服务端&#xff1a; 1、确认下服务端系统是否已安装 NFS rpm -qa nfs-utils rpcbind 如果没有&#xff0c;安装 NFS 服务 yum install -y nfs-utils rpcbi…

SpringMVC controller方法返回值见解3

3.controller方法返回值 3.1.返回ModelAndView 说明&#xff1a;controller方法中定义ModelAndView对象并返回&#xff0c;对象中可添加model数据、指定view 3.2.返回字符串 3.2.1.逻辑视图名 说明&#xff1a;controller方法返回字符串可以指定逻辑视图名&#xff0c;通过…

第九讲_css渐变

css渐变 1. 渐变的作用2. 渐变的类型2.1 线性渐变2.2 环形渐变 1. 渐变的作用 CSS3 渐变&#xff08;Gradients&#xff09;可以让两个或多个指定的颜色之间的显示平稳的过渡。 2. 渐变的类型 渐变&#xff08;Gradients&#xff09;分为线性渐变&#xff08;Linear Gradien…

杨中科 EFCORE 第五部分 同样的Linq 被不同数据据翻译为不同SQL

同样的LINQ 被翻译为不同的SQL 语句 不同数据库方言不同 SOLServer: select top(3) * from t MySOL: select * from t LIMIT 3 Oracle: select * from t where ROWNUM<3 同样的C#语句在不同数据库中被EF Core翻译成不同的SQL语句 EF CORE迁移脚本和数据库相关 因此迁移脚…

Kafka系列(一)

内容 该系列主要是复习期间&#xff0c;通过浏览资料记录的一些笔记和重点&#xff0c;用于日常学习和学习后的总结。 组件概念 broker 一个Kafka的集群通常由多个broker组成&#xff0c;这样才能实现负载均衡、以及容错 broker是无状态&#xff08;Sateless&#xff09;的…

微信公众号对接--客服消息

当你关注公众号&#xff0c;然后在公众号里面发送消息&#xff0c;会收到回复&#xff0c;这个就是客服消息 参考文档:接收普通消息 接收事件推送 客服接口-发消息 想要对接客服消息&#xff0c;首先要获取access_token,这个可以参考我之前的文章:对接微信公众号-CSDN博客 回…

SpringBoot教程(九) | SpringBoot统一异常处理

SpringBoot教程(九) | SpringBoot统一异常处理 异常大家应该都很清楚&#xff0c;我们的项目总是不可避免的出现异常&#xff0c;那么应该如何优雅的进行异常处理使我们需要关注的一个问题&#xff0c;合理的异常封装既可以方便前端的处理&#xff0c;也能够简化后端的开发。 …

Stable Diffusion XL(SDXL)核心基础知识

文章目录 一、Stable Diffusion XL基本概念二、SDXL模型架构上的优化&#xff08;一&#xff09;SDXL的整体架构&#xff08;二&#xff09;VAE&#xff08;三&#xff09;U-Net&#xff08;四&#xff09;text encoder&#xff08;五&#xff09;refiner model 三、SDXL在训练…

通过OpenIddict设计一个授权服务器01-介绍

https://dev.to/robinvanderknaap/setting-up-an-authorization-server-with-openiddict-part-i-introduction-4jid 本文是使用OpenIddict设置授权服务器系列文章的一部分。本系列中的文章将引导您完成使用OpenIddict在ASPNET Core平台上设置OAuth2OpenID Connect授权服务器的…

软件测试|Python如何处理配置文件

配置文件在软件开发中起到了非常重要的作用&#xff0c;它允许开发者将应用程序的设置和参数存储在一个易于管理和修改的地方&#xff0c;而不是硬编码在代码中。Python有多种处理配置文件的方式&#xff0c;本文将介绍其中两种最常用的方法&#xff1a;使用configparser库和使…

Python: ** 的用处

在 Python 中&#xff0c;** 主要用于两个相关但不同的概念&#xff1a;解包&#xff08;unpacking&#xff09;和关键字参数&#xff08;keyword arguments&#xff09;的传递。让我们分别解释这两个方面。 1. 解包&#xff08;Unpacking&#xff09;&#xff1a; a. 解包字…