MySQL数据库八股文
MySQL数据库八股文
第一章 数据库基础
1. 数据库概念
数据库是存储数据的仓库,数据库管理系统是操纵和管理数据库的大型软件(如MySQL,InnoDB是其默认的存储引擎),SQL是操作关系型数据库的编程语言。
2. SQL语法与分类
- SQL语句可以单行或多行书写,以分号结尾。
- SQL语句可以使用空格/缩进来增强语句的可读性,空格和缩进的数量不限制。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
- 注释:
- 单行注释:-- 注释内容 或 # 注释内容
- 多行注释:/* 注释内容 */
数据定义语言(DDL,定义数据库、表、字段)、数据操作语言(DML,对数据库中表的数据记录进行增、删、改操作)、数据查询语言(DQL,用来查询数据库中表记录,关键字是select)、数据控制语言(DCL,管理数据库用户、控制数据库的访问权限)。
第二章 事务
1. 事务介绍
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,保证了数据的完整性和一致性。MySQL的服务器层不管理事务,事务是由存储引擎实现的。InnoDB是MySQL最为广泛的存储引擎。
2. 事务四大特性(ACID)
原子性:事务是不可分割的最小操作单位
一致性:事务完成时,必须使所有的数据都保持一致状态
隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
持久性:事务一旦提交或回滚对数据库中的数据的改变就是永久的
3. 并发事务问题
脏读:一个事务读到另外一个事务还没有提交的数据
不可重复读:一个事务先后读取同一条数据,但两次读取的数据不同
幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在了,好像出现了幻影
4. 事务隔离级别
Read uncommitted存在脏读、不可重复读、幻读
Read commit不存在脏读,存在不可重复读、幻读
Repeatable Read(默认)不存在脏读、不可重复读,存在幻读
Serializable不存在脏读、不可重复读、幻读
从上到下性能越来越低,安全性越来越高
第三章 索引
1. 索引介绍
索引是帮助MySQL高效获取数据的数据结构,是在存储引擎层实现的。能够提高数据检索效率,降低数据库的IO成本。但索引降低了更新表的速度,且索引列占用空间。
2. 索引结构
B树是一棵多路平衡查找树,B+树与B树相比有以下特点:所有的数据都出现在叶子结点,叶子结点形成一个单向链表,非叶子结点仅起到索引数据作用,具体的数据都是在叶子结点。MySQL的B+树是在原有B+树的基础上增加了一个指向相邻链表指针,形成了带有顺序指针的B+树,利于排序。
3. 索引分类
主键索引:对于表中主键创建的索引(默认自动创建且唯一)
唯一索引:避免同一个表中某列数据中的值重复
常规索引:快速定位特定数据
全文索引:查找的是文本中的关键词,而不是比较索引值
InnoDB存储引擎又可以分为聚集索引和二级索引:
聚集索引:将数据存储与索引放到了一块,索引结构的叶子结点保存了行数据,有且仅有一个
二级索引:将索引与数据分开,索引结构的叶子结点关联的是对应主键
4. 索引使用
最左前缀法则:如果索引了多列即联合索引,要遵循最左前缀法,最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列。如果跳跃某一列则索引将会部分失效(后面的字段索引失效)。
5. 索引失效情况
索引列运算、字符串不加引号、模糊查询、or连接条件、数据分布影响(使用索引比全表更慢则不使用索引)
第四章 锁
1. 锁简介
锁是计算机协调多个进程或线程并发访问某一资源的机制,如何保证数据并发访问的一致性和有效性是所有数据库都必须要解决的一个问题。锁分为全局锁、表级锁、行级锁
2. 全局锁
对整个数据库加锁,加锁后整个实例处于只读状态,后续的DDL、DML、DQL都将被阻塞。典型的场景是全库的逻辑备份,但一般不在主库上备份,否则业务基本停摆。
3. 表级锁
表级锁锁住整张表。锁定粒度大,发生锁冲突概率最高,并发度最低。分为表锁、元数据锁和意向锁
表锁分为表共享读锁(不会阻塞所有客户端的读,但会阻塞所有客户端的写)和表独占锁(不会阻塞本客户端的读写,但会阻塞其他客户端的读写)。
元数据锁(MDL):加锁是系统自动控制(一些SQL语句自动添加的),无需显示使用,当表上有活动事务时,不可以对元数据进行写入操作,保证读写的正确性。
意向锁使得表锁不用检查每行数据是否加锁,减少了表锁的检查。分为意向共享锁(与共享锁(read)兼容,与排他锁(write)互斥)和意向排他锁(与共享锁和排他锁都互斥)
4. 行级锁
行级锁每次操作锁住对应的行数据,锁定粒度最小,发生锁冲突的概率最低,并发度最高,通常用在InnoDB引擎。分为行锁、间隙锁和临键锁。
行锁:锁定单个行记录的锁,防止其他事务对此进行update和delete。
间隙锁:锁定记录间隙(不包含该记录),确保索引间隙不变,防止其他事务在这个间隙进行insert进而产生幻读。
临键锁:行锁和间隙锁的组合,同时锁住数据并锁住数据前的间隙
第五章 日志
更新语句涉及到undo log(回滚日志)、redo log(重做日志)和binlog(归档日志)
Undo log:是innoDB存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和MVCC(多版本并发控制)。
Redo log:是innoDB存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电故障的恢复。
Binlog:是Server层生成的日志,主要用于数据备份和主从复制。
第六章 其他
- 范式的目的在于降低数据的冗余性和数据的一致性,而不是为了提高查询效率。
- 在
select语句中,使用关键字distinct可以把重复行屏蔽掉。 - 在
MySQL中,返回字符串长度的函数是length() - sql中查询关键字的书写顺序为:select、distinct、from、join、on、where、group、by、having、order by、limit。执行顺序from、on、join、where、group by、having、select、distinct、order by、limit。
相关文章:
MySQL数据库八股文
MySQL数据库八股文 第一章 数据库基础 1. 数据库概念 数据库是存储数据的仓库,数据库管理系统是操纵和管理数据库的大型软件(如MySQL,InnoDB是其默认的存储引擎),SQL是操作关系型数据库的编程语言。 2. SQL语法与分…...
利用WebSocket +MQ发送紧急订单消息,并在客户端收到消息的用户的页面自动刷新列表
背景:在原有通知公告的基础上,把通知公共的推送服务修改为其他业务收到紧急订单发送公告到消息队列MQ,然后在js中创建一个socket去监听公告,收到公告后刷新所有在订单页面的用户的页面列表(重点就是用户在收到紧急订单…...
R语言——taxize(第一部分)
ropensci 系列之 taxize (中译手册) taxize 包1. taxize支持的网络数据源简介目前支持的API:针对Catalogue of Life(COL) 2. 浅尝 taxize 的一些使用例子2.1. **从NCBI上获取唯一的分类标识符**2.2. **获取分类信息**2…...
【Spring Cloud】黑马头条 用户服务创建、登录功能实现
点击去看上一篇 一、创建用户 model 1.创建用户数据库库 leadnews_user 核心表 ap_user 建库建表语句 这里一定要使用 navicat,执行SQL 文件,以防止 cmd 中的编码问题 先将 SQL 语句,保存在电脑中,再使用 navicat 打开 CREATE…...
聚观早报 |英伟达发布H200;夸克发布自研大模型
【聚观365】11月15日消息 英伟达发布H200 夸克发布自研大模型 iQOO 12系列开启销售 红魔9 Pro配置细节 禾赛科技第三季度营收4.5亿元 英伟达发布H200 全球市值最高的芯片制造商英伟达公司,正在升级其H100人工智能处理器,为这款产品增加更多功能&am…...
15项基本SCADA技术技能
1. 人机界面 人机界面是将操作员连接到设备、系统或机器的仪表板或用户界面。 以下是 hmi 在 scada 技术人员简历中的使用方式: 完成了查尔斯湖废水处理厂和提升站的完整 HMI 图形界面。对加油系统、加油车、PLC、HMI、触摸屏进行故障排除和维修。对 Horner HMI …...
Golang 发送邮件
Go 有内置好的本地库可以发送邮件,在 GitHub 上也有别人写好的第三方包可以发送邮件。 本文将分别介绍一下这两种发送邮件的方式。 1、内置的net/smtp 为了更好的模拟发送邮件,推荐一个邮件测试工具:MailHog,MailHog 是面向开发…...
【ARM Trace32(劳特巴赫) 使用介绍 5-- Trace32 通过 JTAG 命令获取数据寄存器 IDCODE的值】
请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 Trace JTAG Command LineTrace32 JTAG 数据发送命令Trace32 JTAG 数据接收命令Trace32 数据访问修饰符Trace32 IDCODE 脚本实例Trace32 APITrace JTAG Command Line Trace32 JTAG 数据发送命令 JTAG.SHIFTTMS <…...
Python之while/for,continue/break
定义一个随机数: import random numrandom.randint(1,10) while循环: while 条件(): 条件满足时,做的事情1 条件满足时,做的事情2 ...... for循环: for 变量 in range(10): 循环需要执行的代码 else: 循环结束时&…...
卷积神经网络(CNN)衣服图像分类的实现
文章目录 前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)我的环境: 2. 导入数据3.归一化4.调整图片格式5. 可视化 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、模型评估 前期工作 1. 设置GPU(如果使用的是CPU可以…...
odoo16前端框架源码阅读——env.js
env.js(env的初始化以及服务的加载) 路径:addons\web\static\src\env.js 这个文件的作用就是初始化env,主要是加载所有的服务。如orm, title, dialog等。 1、env.js 的加载时机 前文我们讲过前端的启动函数,start.…...
浙大恩特客户资源管理系统 SQL注入漏洞复现
0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源,提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中T0140_editAction.entweb接口处存在SQL注入漏洞,未…...
ESP32网络开发实例-BME280传感器数据保存到InfluxDB时序数据库
BME280传感器数据保存到InfluxDB时序数据库 文章目录 BME280传感器数据保存到InfluxDB时序数据库1、BM280和InfluxDB介绍2、软件准备3、硬件准备4、代码实现在本文中,将详细介绍如何将BME280传感器数据上传到InfluxDB中,方便后期数据处理。 1、BM280和InfluxDB介绍 InfluxDB…...
C++中sort()函数的greater<int>()参数
目录 1 基础知识2 模板3 工程化 1 基础知识 sort()函数中的greater<int>()参数表示将容器内的元素降序排列。不填此参数,默认表示升序排列。 vector<int> a {1,2,3}; sort(a.begin(), a.end(), greater<int>()); //将a降序排列 sort(a.begin()…...
2024有哪些免费的mac苹果电脑内存清理工具?
在我们日常使用苹果电脑的过程中,随着时间的推移,可能会发现设备的速度变慢了,甚至出现卡顿的现象。其中一个常见的原因就是程序占用内存过多,导致系统无法高效地运行。那么,苹果电脑内存怎么清理呢?本文将…...
线性表的概念
目录 1.什么叫线性表2.区分线性表的题 1.什么叫线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是…...
锐捷练习-ospf虚链路及rip路由相互引入
一、相关知识补充 1、ospf基本概述 OSPF(Open Shortest Path First)是一种链路状态路由协议,用于在计算机网络中进行路由选择。它是内部网关协议(IGP)之一,常用于大规模企业网络或互联网服务提供商的网络…...
【机器学习】线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降
1. 概念简述 线性回归是通过一个或多个自变量与因变量之间进行建模的回归分析,其特点为一个或多个称为回归系数的模型参数的线性组合。如下图所示,样本点为历史数据,回归曲线要能最贴切的模拟样本点的趋势,将误差降到最小。 2. 线…...
Word中NoteExpress不显示的问题
首先确认我们以及安装了word插件 我们打开word却没有。此时我们打开:文件->选项->加载项 我们发现被禁用了 选择【禁用项目】(如果没有,试一试【缓慢且禁用的加载项】),点击转到 选择启用 如果没有禁用且没有出…...
连接池的大体介绍,常用配置及在springboot项目中的应用
连接池 在Java开发中,常见的数据库连接池有哪些?_java常见数据库连接池_举个例子学java的博客-CSDN博客 常见的连接池配置参数 java 连接池参数 - 百度文库 连接池的具体配法 Spring Boot之默认连接池配置策略_spring mysql默认连接池大小-CSDN博客...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用(Math::max) 2 函数接口…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
Shell 解释器 bash 和 dash 区别
bash 和 dash 都是 Unix/Linux 系统中的 Shell 解释器,但它们在功能、语法和性能上有显著区别。以下是它们的详细对比: 1. 基本区别 特性bash (Bourne-Again SHell)dash (Debian Almquist SHell)来源G…...
