数据库八股

接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条记录,就好像发生了幻觉一样。

事务的四大特性有哪些

相关推荐
爬也要爬着前进8 分钟前
redis主从搭建
数据库·redis·缓存
@Mike@27 分钟前
02-数据库学习笔记(SQL引擎)
数据库·笔记·学习
笃行3502 小时前
国产化落地避坑 · 干货向|Oracle 迁金仓 KES,我把外连接消除排在隐性陷阱第一位
数据库
老纪的技术唠嗑局2 小时前
花一年时间整理出的:AI 数据库混合搜索入门实践
数据库
川石课堂软件测试3 小时前
安全测试|常见SQL注入攻击方式、实例及预防
服务器·数据库·sql·功能测试·测试工具·安全·单元测试
笃行3503 小时前
国产化落地避坑 · 干货向|迁移后那条「测试能过、一上生产就查空」的 SQL,多半栽在 WHERE 函数顺序上
数据库
蓝田~4 小时前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
sunxunyong4 小时前
doris用户资源组配置
数据库
Cloud云卷云舒4 小时前
云卷云舒:HaishanDB的AI原生能力主要应用场景
数据库·人工智能·ai-native·haishandb·移动云长期记忆
时间的拾荒人4 小时前
MySQL 视图详解
android·数据库·mysql