数据库八股

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

事务的四大特性有哪些

相关推荐
百结2141 小时前
Mysql数据库操作
数据库·mysql·oracle
keep one's resolveY2 小时前
时区问题解决
数据库
Leinwin2 小时前
OpenClaw 多 Agent 协作框架的并发限制与企业化规避方案痛点直击
java·运维·数据库
qq_417695052 小时前
机器学习与人工智能
jvm·数据库·python
漫随流水2 小时前
旅游推荐系统(view.py)
前端·数据库·python·旅游
ego.iblacat2 小时前
MySQL 服务基础
数据库·mysql
Maverick064 小时前
Oracle Redo 日志操作手册
数据库·oracle
攒了一袋星辰4 小时前
高并发强一致性顺序号生成系统 -- SequenceGenerator
java·数据库·mysql
W.D.小糊涂4 小时前
gpu服务器安装windows+ubuntu24.04双系统
c语言·开发语言·数据库
云贝教育-郑老师5 小时前
【OceanBase 的多租户架构是怎样的?有什么优势?】
数据库·oceanbase