MySQL 核心考点全解:ACID、引擎对比、SQL 执行流程

目录

执行一条SQL请求的过程是什么?

mysql的三大引擎

[A - 原子性(Atomicity)](#A - 原子性(Atomicity))

[C - 一致性(Consistency)](#C - 一致性(Consistency))

[I - 隔离性(Isolation)](#I - 隔离性(Isolation))

[D - 持久性(Durability)](#D - 持久性(Durability))

mysql为什么InnoDB是默认引擎?

mysql的InnoDB与MyISAM的区别


执行一条SQL请求的过程是什么?

由图可以清晰看到

连接器:用于与客户端建立连接,用户管理,校验身份

查询缓存:查询语句如果命中查询缓存则直接返回,否则继续往下执行。MySQL 8.0 已删除该模块;

解析器:把sql语句进行词法分析、语法分析然后构建语法树,方便后续模块读取sql语句的表名、字段名、字段、语句

执行sql:分为3步

预处理:检查表或字段是否存在;将 select * 中的 * 扩展为表上所有的列

优化:基于查询成本的考虑,选择查询成本最低的计划

执行:根据执行计划执行SQL查询语句,从存储引擎读取记录,返回给客户端

mysql的三大引擎

**InnoDB:**是MySQL的默认引擎,具有ACID事务支持、行级锁、外键约束等特性,有较好的数据完整性和并发控制能力,适用于高并发场景

A - 原子性(Atomicity)

核心:事务是一个不可分割的整体,要么全成功,要么全失败。

C - 一致性(Consistency)

核心:事务执行前后,数据库的数据状态必须是合法、一致的。

I - 隔离性(Isolation)

核心:多个事务同时执行时,它们之间互相隔离,互不干扰。

D - 持久性(Durability)

核心:事务一旦提交成功,数据就永久保存,不会因为数据库崩溃、断电等问题丢失。

MyISAM: 是MySQL另一种场景的存储引擎,有较小的存储空间和内存消耗,并不支持ACID事务、外键约束、行级锁等特性,适用于需要读较多的场景,但在并发写入和数据完整性有一定限制

**MeMory:**把数据存储在内存中,适用于对读性能要求较高的场景,也不支持ACID等特性,并且在服务器重启或崩溃的时候会出现数据丢失

注意InnoDB和MyISAM 与 MeMory不同的是后者是把数据存储在内存,所以可以适用高性能场景

mysql为什么InnoDB是默认引擎?

因为InnoDB有ACID事务支持并且在崩溃恢复和并发性能方面都有不错的能力

事务:InnoDB有ACID(原子性、一致性、隔离性、持久性)事务支持,MyISAM没有

崩溃恢复:InnoDB有redo log日志可以恢复因崩溃而丢失的数据,MyISAM没有

并发性能:InnoDB有行级锁,锁的粒度小,只需要锁住一行,而MyISAM是表锁,锁必须锁住整个表粒度大

并且如果用MyISAM的话,因其使用非聚簇索引的原因,如果发生了数据的修改,那么对应的数据地址也要修改,对性能消耗比较大,而InnoDB只需要对修改的数据排序就行

mysql的InnoDB与MyISAM的区别

事务:InnoDB有事务ACID,MyISAM没有

锁粒度:前者是行锁,粒度小,后者是表锁粒度大

索引结构:InnoDB是聚簇索引(主键索引),只在叶子节点保存了整行数据,其余节点只存储主键值和指针,这样的设计可以让B+Tree的存储数据量增加,只是InnoDB在使用聚簇索引时,辅助索引就只能查到对应的主键值,然后再在主键索引里查询对应的整行数据。MyISAM是非聚簇索引,可以通过辅助键索引和主键索引一起,直接查到数据

count的效率:前者select count(*) from 需要全表扫描才能获取到整个count,但后者用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可

相关推荐
噜哥带你玩转 AI 大模型2 小时前
面试加分项!CASE WHEN 两种写法、CTE 公共表表达式、四大类窗口函数,老哥一次讲透
mysql·窗口函数·cte·sql 进阶
bksczm2 小时前
InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer
数据库·mysql
招风的黑耳2 小时前
SpringBoot+Vue+MySQL 民宿在线预定平台 完整可运行版(源码+文档)
vue.js·spring boot·mysql
.痞老板.5 小时前
mysql初阶--数据库设计
数据库·mysql·oracle
Decay__6 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
Thanks_ks6 小时前
SQL 的 GROUP BY 与聚合函数:从会写 SELECT 到会做统计
数据库·sql·mysql·group by·数据统计·聚合函数·having
Decay__14 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构
苏宸啊19 小时前
MySQL(一)
数据库·mysql
2603_9696948519 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
这个DBA有点耶20 小时前
库内语义构建 vs 外挂向量库:业务语义缺失,才是RAG“胡说八道”的根源
数据库·mysql·aigc