MySQL知识点归纳总结(一)
1、事务的四大特性?
事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durability)。
- 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
- 一致性是指一个事务执行之前和执行之后都必须处于一致性状态。比如a与b账户共有1000块,两 人之间转账之后无论成功还是失败,它们的账户总和还是1000。
- 隔离性。跟隔离级别相关,如read committed,一个事务只能读到已经提交的修改。
- 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库 系统遇到故障的情况下也不会丢失提交事务的操作。
数据库中是如何实现原子性的?
undo log
undo log称之为回滚日志,每条数据的变化(insert/update/delete)都会产生一条记录,并且日志持久化到磁盘,undo log用来记录数据修改前的信息,比如说要插入一条记录,那么undo log就会记录一条删除该信息的语句,这样需要回滚的时候undo log就会执行删除之前插入的那条记录,达到没有修改前的状态,更新一个记录也会生成一条sql记录更新前的字段状态,从而实现了原子性。
数据库中是如何保证一致性的?
靠其他三条特性共同保证的。
数据库中是如何保证隔离性的?
MVCC机制
数据库中是如何保证持久性的?
Redolog
2、数据库的三大范式
第一范式1NF
确保数据库表字段的原子性。
比如字段 userInfo : 山东省 1318162008’ ,依照第一范式必须拆分成 userInfo : 山东省 userTel : 1318162008 两个字段。
第二范式2NF
依赖于全部的主键,而不是一部分主键。
首先要满足第一范式,另外包含两部分内容,一是表必须有一个主键;二是非主键列必须完全依赖于主 键,而不能只依赖于主键的一部分。 举个例子。假定选课关系表为StudentCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分),主键为(学号, 课 程名称)。其中学分完全依赖于课程名称,姓名年龄完全依赖学号,不符合第二范式,会导致数据冗余 (学生选n门课,姓名年龄有n条记录)、插入异常(插入一门新课,因为没有学号,无法保存新课记 录)等问题。 可以拆分成三个表:学生:Student(学号, 姓名, 年龄);课程:Course(课程名称, 学分);选课关系: StudentCourseRelation(学号, 课程名称, 成绩)。
第三范式3NF
直接依赖于主键,不能传递依赖。
首先要满足第二范式,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。 假定学生关系表为Student(学号, 姓名, 年龄, 学院id, 学院地点, 学院电话),主键为"学号",其中学院id依 赖于学号,而学院地点和学院电话依赖于学院id,存在传递依赖,不符合第三范式。 可以把学生关系表分为如下两个表:学生:(学号, 姓名, 年龄, 学院id);学院:(学院,id 地点, 电话)。
2NF和3NF的区别?
2NF依据是非主键列是否完全依赖于主键,还是依赖于主键的一部分。 3NF依据是非主键列是直接依赖于主键,还是直接依赖于非主键。
3、事务隔离级别和存在的问题有哪些?
问题:脏读、不可重复读、幻读。
脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
不可重复读是指在对于数据库中的某行记录,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,另一个事务修改了数据并提交了。
幻读是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之 前的事务再次读取该范围的记录时,会产生幻行,就像产生幻觉一样,这就是发生了幻读。
四种隔离级别:
- Read uncommitted (读未提交):所有事务都可以看到其他未提交事务的执行结果。
- Read committed (读已提交):一个事务只能看见已经提交事务所做的改变。可避免脏读的发生。
- Repeatable read (可重复读):MySQL的默认事务隔离级别,它确保同一事务的多个实例在并发读 取数据时,会看到同样的数据行,解决了不可重复读的问题。
- Serializable (串行化):通过强制事务排序,使之不可能相互冲突,从而解决幻读问题。
4、为什么使用B+树索引,其他索引不好吗?
B+树的查询效率更加稳定,任何关键字的查找必须走一条到根节点的路径。所有查询路径长度相同,导致每一个数据查询的效率相当。
B+树所有数据都存在叶子节点,范围扫描更加方便。B树需要进行中序遍历。
B+树的节点只存储key,其他信息存放在页中,这就使得索引中可以存放更多的节点,减少IO的支出。
B树数据不仅仅存在叶子中。
哈希的分布没有规律,范围查找不合适,性能不稳定,无法排序等等。
红黑树也存在这个问题,范围查找等不合适,性能不稳定。和B树有差不多的缺点。
5、索引有什么分类?
聚簇索引/主键索引:
主键形成的索引,如果没有规定主键也会有一个隐藏字段作为主键生成这个索引,默认就会生成这个索引。
叶子节点中存放的是整张表的数据,这也就应了我们经常说的回表查询。
二级索引:
- 普通索引:正常的索引
- 唯一索引:这种索引允许null的,它的主要作用是为了保证数据唯一性,一张表可以创建多个唯一索引
- 联合索引:在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段 时,索引才会被使用,使用组合索引时遵循最左前缀原则。
- 全文索引:只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索 引。
- 前缀索引:有时需要在很长的字符列上创建索引,这会造成索引特别大且慢。使用前缀索引可以避免这个问题。 前缀索引是指对文本或者字符串的前几个字符建立索引,这样索引的长度更短,查询速度更快。
6、最左匹配原则是什么?
这是原则在创建联合索引时使用,主要是索引的生效方式。当遇到范围查询时会停止匹配,后面的字段不会使用索引。
对(a,b,c)建立索引,查询条件使用 a/ab/abc 会走索引,使用 bc 不会走索引。
对(a,b,c,d)建立索引,查询条件为 a = 1 and b = 2 and c > 3 and d = 4 ,那么,a,b,c三个字段能 用到索引,而d就匹配不到。因为遇到了范围查询!
7、什么是覆盖索引?
select的数据列只用从索引中就能够取得,不需要回表进行二次查询,换句话说查询列要被所使用的索 引覆盖。对于innodb表的二级索引,如果索引能覆盖到查询的列,那么就可以避免对主键索引的二次查 询。
不是所有类型的索引都可以成为覆盖索引。
覆盖索引要存储索引列的值,而哈希索引、全文索引不存储 索引列的值,所以MySQL只能使用b+树索引做覆盖索引。
对于使用了覆盖索引的查询,在查询前面使用explain,输出的extra列会显示为 using index 。
8、常见的存储引擎有哪些?
InnoDB存储引擎
InnoDB是MySQL默认的事务型存储引擎,使用最广泛,基于聚簇索引建立的。InnoDB内部做了很多优 化,如能够自动在内存中创建自适应hash索引,以加速读操作。 优点:支持事务和崩溃修复能力。InnoDB引入了行级锁和外键约束。 缺点:占用的数据空间相对较大。 适用场景:需要事务支持,并且有较高的并发读写频率。
MyISAM存储引擎
数据以紧密格式存储。对于只读数据,或者表比较小、可以容忍修复操作,可以使用MyISAM引擎。 MyISAM会将表存储在两个文件中,数据文件.MYD和索引文件.MYI。 优点:访问速度快。 缺点:MyISAM不支持事务和行级锁,不支持崩溃后的安全恢复,也不支持外键。 适用场景:对事务完整性没有要求;只读的数据,或者表比较小,可以忍受修复repair操作。
MEMORY存储引擎
MEMORY引擎将数据全部放在内存中,访问速度较快,但是一旦系统奔溃的话,数据都会丢失。 MEMORY引擎默认使用哈希索引,将键的哈希值和指向数据行的指针保存在哈希索引中。
9、索引失效的场景有哪些?
- 当我们使用左或者左右模糊匹配的时候,也就是
like %xx
或者like %xx%
这两种方式都会造成索引失效; - 当我们在查询条件中对索引列使用函数,就会导致索引失效。
- 当我们在查询条件中对索引列进行表达式计算,也是无法走索引的。
- MySQL 在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较。如果字符串是索引列,而条件语句中的输入参数是数字的话,那么索引列会发生隐式类型转换,由于隐式类型转换是通过 CAST 函数实现的,等同于对索引列使用了函数,所以就会导致索引失效。
- 联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配,否则就会导致索引失效。
- 在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。
相关文章:
MySQL知识点归纳总结(一)
1、事务的四大特性? 事务特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性 (Durability)。 原子性是指事务包含的所有操作要么…...

SocketWeb实现小小聊天室
SocketWeb实现小小聊天室 消息推送的常见方式轮询长轮询SSE(server-sent event):服务器发送事件WebSocketWebSocket简介WebSocket API 实现小小聊天室实现流程消息格式客户端-->服务端服务端-->客户端 消息推送的常见方式 轮询 浏览器…...
如何在启用Secure Boot的Ubuntu 22.04电脑中安装使用VirtualBox 6.1
我使用的是华为Matebook X Pro笔记本电脑,默认开启了UEFI安全引导(UEFI Secure Boot),安装了Windows和Ubuntu双操作系统,平时基本上都是使用Ubuntu 22.04(Linux Mint 21.3),使用上也…...

基于B/S+MySQL+Tomcat开发的旅游信息管理系统
基于B/SMySQLTomcat开发的旅游信息管理系统 项目介绍💁🏻 塞北村镇旅游网站设计主要用于实现旅游景点信息管理,基本功能包括:主界面模块设计,用户注册模块,旅游景点模块,酒店预订模块࿰…...
mac m3安装nvm安装说明;mac安装xbrew
安装说明说明: 1.安装brew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"2.安装nvm brew install nvm3.创建.nvm目录 mkdir ~/.nvm4.编辑 ~/.zshrc 配置文件 vi ~/.zshrc5.在 ~/.zshrc 配置文件内添加内…...

【小沐学QT】QT学习之Web控件的使用
文章目录 1、简介1.1 Qt简介1.2 Qt下载和安装1.3 Qt快捷键1.4 Qt帮助 2、QtWeb控件2.1 测试代码1(QApplication)2.2 测试代码2(QApplicationQWidget)2.3 测试代码3(QApplicationQMainWindow)2.4 测试代码4&…...
word embedding
介绍: ASCII可以编码为计算机可以识别的数据,为什么还需要embedding? 计算机只是对“字母”进行ASCII编码,并没有对词汇的“Word”编码。词汇应该是咱们处理自然语言的最基本的元素,而不是字母。那么世界上有千千万万的Word&am…...
原码,反码,补码
原码 什么是原码 原码:十进制数据的二进制表现形式,最左边是符号位,0为正,1为负 最大值 0 1 1 1 1 1 1 1 > 127 最小值 1 1 1 1 1 1 1 1 > -127 原码的弊端 利用原码对正数进行计算是不会有问题的 但是如果是负数计算…...

科技赋能,MTW400A为农村饮水安全打通“最后一公里”
日前,山东省政府纵深推进国家省级水网先导区建设,持续深化“水网”行动,着力构筑水安全保障网、水民生服务网、水生态保护网,建设水美乡村示范带、内河航运示范带、文旅融合示范带、绿色发展示范带,推动形成“三网四带…...

测试计划、测试方案、测试策略、测试用例的区别
一 测试计划 测试计划是指描述了要进行的测试活动的范围、方法、资源和进度的文档。它主要包括测试项、被测特性、各阶段的测试任务、时间进度安排,谁执行任务和风险控制等,可以包括测试策略。 二 测试方案 测试方案是指描述需要测试的特性、测试的方…...

c# 异常处理
异常类 .NET Framework 类库中的所有异常都派生于 Exception 类,异常包括系统异常和应用异常。 默认所有系统异常派生于 System.SystemException,所有的应用程序异常派生于 System.ApplicationException。 系统异常一般不可预测,比如内存堆…...
(delphi11最新学习资料) Object Pascal 学习笔记---第6章第3节(传递字符串作为参数)
6.3 字符串数据类型 Object Pascal 中的字符串数据类型比简单的字符数组复杂得多,其功能远远超出了大多数编程语言为类似数据类型提供的功能。在本节中,我将介绍这种数据类型背后的关键概念;在接下来的章节中,我们将更详细地探…...

k8s节点负载使用情况分析命令kubectl describe node [node-name]
1.到任意安装了kubectl节点命令的节点上执行kubectl describe node [node-name] 上面的Requests最小分配 Limits最大分配是所有pod之和,最小分配之和不能超过服务器实际参数,否则新的pod会因为资源不够起不来,最大分配是预设之和࿰…...

自动驾驶加速落地,激光雷达放量可期(上)
1 激光雷达应用广泛,汽车有望成最大催化 激光雷达(LiDAR)是一种主动遥感技术,通过测定传感器发出的激光在传感器与目标物体之间的传播距离,来分析目标地物表面的反射能量大小、反射波谱的幅度、频率和相位等信息&#…...
变量的间接引用
场景: 如果第一个变量的值是第二个变量的名字,我们能够从第一个变量中取得第二个变量的值吗?例如,如果aztj且ztjz,那么我们能够通过引用变量a来获得值z吗?答案是可以,它被称为间接引用…...
学习JAVA的第六天(基础)
目录 集合 集合和数组的对比 ArrayList成员方法 ArrayList成员方法代码展示 练习 集合的遍历01之字符串 集合的遍历02之数字 集合的遍历03之学生对象 集合 集合和数组的对比 从长度维度来看 数组长度固定 集合长度可变从存储类型维度来看 数组可以存放基本数据类型和…...

LeetCode 2673.使二叉树所有路径值相等的最小代价:自顶向下的DFS 或 自底向上的递推
【LetMeFly】2673.使二叉树所有路径值相等的最小代价:自顶向下的DFS 或 自底向上的递推 力扣题目链接:https://leetcode.cn/problems/make-costs-of-paths-equal-in-a-binary-tree/ 给你一个整数 n 表示一棵 满二叉树 里面节点的数目,节点编…...

9、电源管理入门之CPU Idle
目录 1. CPU Idle有什么用? 2. CPU Idle整体框架 3. Idle状态判断 3. cpuidle core 4. 注册初始化 4.1 cpuidle governor注册 4.2 cpuidle driver注册 4.3 cpuidle device注册 5. cpuidle触发流程 关于Linux的很多知识其实网上的资料非常的多,但是也有些问题: 有时…...
uniapp的扩展组件uni-popup 弹出层自动打开
我的需求是在页面加载完之后自动打开弹窗,自动打开只能写在onReady 或 mounted 生命周期内,这是这个组件的规定: 如果想在页面渲染完毕后就打开 uni-popup ,请在 onReady 或 mounted 生命周期内调用,确保组件渲染完毕…...
二、mysql常用函数
目录 一、Mysql数值型函数 二、Mysql字符串函数 三、Mysql日期和时间函数 四、Mysql聚合函数 五、Mysql流程控制函数 六、其他函数 一、Mysql数值型函数 函数名称 作用 abc 求绝对值 sqrt 求二次方根 mod 求余数 ceil 和 ceiling 功能一样,都是返回不小…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...

密码学基础——SM4算法
博客主页:christine-rr-CSDN博客 专栏主页:密码学 📌 【今日更新】📌 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 编辑…...