数据库八股

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

事务的四大特性有哪些

相关推荐
墨笔之风2 小时前
数据库文档生成工具(PostgreSQL 适配版 - Java 8 兼容)
java·数据库·postgresql
小雨下雨的雨2 小时前
第7篇:Redis性能优化实战
数据库·redis·性能优化
姜太小白2 小时前
【数据库】SQLite 时间加1天的方法总结
java·数据库·sqlite
先做个垃圾出来………2 小时前
SQL字符串函数
数据库·sql
if时光重来2 小时前
kingbase数据库解决执行更新字段时锁表问题
数据库·kingbase
前端小臻2 小时前
数据库表设计的流程(包含设计流程、建立数据库模型以及使用dbword导出数据库文档)
数据库
数据库知识分享者小北2 小时前
Dify+ADB Supabase+LLM 实现 AI 客服系统
数据库·人工智能·阿里云·adb·postgresql
数据库学啊2 小时前
专业的车联网时序数据库排名是怎样的
数据库·时序数据库
Javatutouhouduan3 小时前
Java面试常问Redis核心知识点整理!
java·数据库·redis·java面试·后端开发·java架构师·java程序员