当前位置: 首页 > news >正文

MySQL数据库八股文

MySQL数据库八股文

第一章 数据库基础

1. 数据库概念

数据库是存储数据的仓库,数据库管理系统是操纵管理数据库的大型软件(如MySQL,InnoDB是其默认的存储引擎),SQL是操作关系型数据库的编程语言

2. SQL语法与分类

  1. SQL语句可以单行或多行书写,以分号结尾
  2. SQL语句可以使用空格/缩进来增强语句的可读性,空格和缩进的数量不限制。
  3. MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
  4. 注释:
  • 单行注释:-- 注释内容 或 # 注释内容
  • 多行注释:/* 注释内容 */

数据定义语言(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层生成的日志,主要用于数据备份和主从复制。

第六章 其他

  1. 范式的目的在于降低数据的冗余性和数据的一致性,而不是为了提高查询效率。
  2. select语句中,使用关键字distinct可以把重复行屏蔽掉。
  3. MySQL中,返回字符串长度的函数是length()
  4. 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

定义一个随机数&#xff1a; import random numrandom.randint(1,10) while循环&#xff1a; while 条件(): 条件满足时&#xff0c;做的事情1 条件满足时&#xff0c;做的事情2 ...... for循环&#xff1a; for 变量 in range(10): 循环需要执行的代码 else: 循环结束时&…...

卷积神经网络(CNN)衣服图像分类的实现

文章目录 前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;我的环境&#xff1a; 2. 导入数据3.归一化4.调整图片格式5. 可视化 二、构建CNN网络模型三、编译模型四、训练模型五、预测六、模型评估 前期工作 1. 设置GPU&#xff08;如果使用的是CPU可以…...

odoo16前端框架源码阅读——env.js

env.js&#xff08;env的初始化以及服务的加载&#xff09; 路径&#xff1a;addons\web\static\src\env.js 这个文件的作用就是初始化env&#xff0c;主要是加载所有的服务。如orm, title, dialog等。 1、env.js 的加载时机 前文我们讲过前端的启动函数&#xff0c;start.…...

浙大恩特客户资源管理系统 SQL注入漏洞复现

0x01 产品简介 浙大恩特客户资源管理系统是一款针对企业客户资源管理的软件产品。该系统旨在帮助企业高效地管理和利用客户资源&#xff0c;提升销售和市场营销的效果。 0x02 漏洞概述 浙大恩特客户资源管理系统中T0140_editAction.entweb接口处存在SQL注入漏洞&#xff0c;未…...

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>()参数表示将容器内的元素降序排列。不填此参数&#xff0c;默认表示升序排列。 vector<int> a {1,2,3}; sort(a.begin(), a.end(), greater<int>()); //将a降序排列 sort(a.begin()…...

2024有哪些免费的mac苹果电脑内存清理工具?

在我们日常使用苹果电脑的过程中&#xff0c;随着时间的推移&#xff0c;可能会发现设备的速度变慢了&#xff0c;甚至出现卡顿的现象。其中一个常见的原因就是程序占用内存过多&#xff0c;导致系统无法高效地运行。那么&#xff0c;苹果电脑内存怎么清理呢&#xff1f;本文将…...

线性表的概念

目录 1.什么叫线性表2.区分线性表的题 1.什么叫线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是…...

锐捷练习-ospf虚链路及rip路由相互引入

一、相关知识补充 1、ospf基本概述 OSPF&#xff08;Open Shortest Path First&#xff09;是一种链路状态路由协议&#xff0c;用于在计算机网络中进行路由选择。它是内部网关协议&#xff08;IGP&#xff09;之一&#xff0c;常用于大规模企业网络或互联网服务提供商的网络…...

【机器学习】线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降

1. 概念简述 线性回归是通过一个或多个自变量与因变量之间进行建模的回归分析&#xff0c;其特点为一个或多个称为回归系数的模型参数的线性组合。如下图所示&#xff0c;样本点为历史数据&#xff0c;回归曲线要能最贴切的模拟样本点的趋势&#xff0c;将误差降到最小。 2. 线…...

Word中NoteExpress不显示的问题

首先确认我们以及安装了word插件 我们打开word却没有。此时我们打开&#xff1a;文件->选项->加载项 我们发现被禁用了 选择【禁用项目】&#xff08;如果没有&#xff0c;试一试【缓慢且禁用的加载项】&#xff09;&#xff0c;点击转到 选择启用 如果没有禁用且没有出…...

连接池的大体介绍,常用配置及在springboot项目中的应用

连接池 在Java开发中&#xff0c;常见的数据库连接池有哪些&#xff1f;_java常见数据库连接池_举个例子学java的博客-CSDN博客 常见的连接池配置参数 java 连接池参数 - 百度文库 连接池的具体配法 Spring Boot之默认连接池配置策略_spring mysql默认连接池大小-CSDN博客...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...