数据库八股

接offer!接offer!

文章目录

一条SQL查询语句是如何执行的

  1. 连接器:连接器负责跟客户端建立连接、获取权限、维持和管理连接;
  2. 查缓存:MySQL拿到一个查询请求后,会先到查询缓存查看是否执行过这条语句。如果执行过其结果可能以键值对的形式,缓存在内存中;
  3. 分析器:输入的SQL语句由字符串和空格组成,MySQL需识别出里面的字符串分布代表什么;
  4. 优化器:当一条SQL语句的表里有多个索引,优化器可以决定使用哪个索引。或者在一个语句有多表关联(join)时,优化器可以决定各个表的连接顺序;
  5. 执行器:MySQL通过分析器知道做什么,通过优化器知道怎么做,最后进入执行阶段,开始执行语句。

数据库的事务隔离级别有哪些

  1. 读未提交
    • 允许一个事务读取另一个事务未提交的数据修改;
    • 是最低的隔离级别,存在脏读、不可重复读和幻读的问题。
  2. 读已提交
    • 一个事务只能读取已经提交的数据,其它事务的修改在该事务提交后才可见;
    • 解决了脏读问题,但仍可能出现不可重复读和幻读。
  3. 可重复读
    • 事务执行期间,多次读取同一数据会得到相同的结果,即在事务开始和结束之间,其他事务对数据的修改不可见;
    • 解决了不可重复读问题,但仍可能出现幻读。
    • 在MySQL的InnoDB存储引擎中,默认的隔离级别是可重复读,并且通过Next-Key锁(行锁+间隙锁)在可重复读隔离级别下就避免了幻读。
  4. 序列化
    • 最高隔离级别,确保事务之间的并发执行效果和串行执行效果相同,即不会出现脏读、不可重复读和幻读的问题。但是执行效率也是最低的。

补充:

  1. 脏读:一个事务读取了另一个未提交事务修改的数据。如果那个未提交的事务后来被回滚了,那么第一个事务读取的数据就是无效的。
    • 举例:事务A修改了某行数据,但还没有提交。此时事务B读取了事务A修改后的数据。然后事务A因为某种原因回滚了,那么事务B读取的数据就是脏数据。
  2. 不可重复读:在一个事务内,多次读取同一行 数据,但是在两次读取之间,另一个事务修改了该行数据并提交,导致第一个事务两次读取的结果不一致。
    • 举例:事务A第一次读取某行数据,然后事务B修改了该行数据并提交。接着事务A再次读取该行数据,发现数据不一致(被事务B修改了)。
  3. 幻读:在一个事务内,多次查询同一个范围的数据,但是在两次查询之间,另一个事务插入或删除了该范围内的数据,导致第一个事务两次查询的结果集数量不一致。注意:幻读是针对数据集的插入或删除(新增或减少记录)
    • 举例:事务A第一次查询某个条件的数据,返回10条记录。然后事务B插入了一条符合该条件的数据并提交。接着事务A再次查询,返回11条记录,就好像发生了幻觉一样。

事务的四大特性有哪些

相关推荐
IvorySQL1 小时前
PostgreSQL 日报 | JOIN 与外键优化(8 月 9 日)
数据库·postgresql
ltl1 小时前
自治数据库十年回顾:Peloton、NoisePage、OtterTune 到云原生 auto-tuning
数据库
灯澜忆梦3 小时前
【MySQL10】进阶篇 | 索引_#2性能优化
数据库·sql·mysql·性能优化
C++ 老炮儿的技术栈5 小时前
从 Qt Designer 属性编辑器的层级可以看到继承链
c语言·数据库·c++·qt·sqlite·visual studio
MC皮蛋侠客5 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
zt1985q6 小时前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
IvorySQL7 小时前
PostgreSQL 日报| PostgreSQL 19 默认 WAL 压缩算法(8 月 8 日)
数据库·postgresql·区块链
油丶酸萝卜别吃8 小时前
MySQL B+ 树查询全过程详解
数据库·mysql
leisoo80978 小时前
股票数据本地化存储实战:JSON、数据库与列式存储的方案对比
jvm·数据库·json
Exclusive_Cat8 小时前
MySQL回表机制解析与优化策略
数据库·sql