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,但后者用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可

相关推荐
尘埃落定wf2 小时前
Python 数据库迁移:Alembic 太重?自己动手搭一套轻量版
数据库·python·mysql
Bert.Cai2 小时前
MySQL IFNULL()函数详解
数据库·mysql
eggrall2 小时前
MySQL数据类型
数据库·mysql
HalvmånEver2 小时前
MySQL事务(二)
数据库·mysql
会编程的土豆2 小时前
mysql数据类型
数据库·mysql
南境十里·墨染春水3 小时前
linux 学习进展 mysql 事务详解
linux·学习·mysql
南境十里·墨染春水3 小时前
linux学习进展 mysql视图详解
linux·学习·mysql
思麟呀3 小时前
MySQL的库和表的操作
数据库·mysql
思麟呀3 小时前
初始MySQL数据库
服务器·数据库·mysql