随笔分类 -  java开发相关 / 数据库八股

摘要:哈希表实际上是一个数组,数组里多每一个元素就是一个哈希桶。 当一个键值对的键经过 Hash 函数计算后得到哈希值,再将(哈希值 % 哈希表大小)取模计算,得到的结果值就是该 key-value 对应的数组元素位置,也就是第几个哈希桶。 下面是重点: 什么是哈希冲突呢? 举个例子,有一个可以存放8个哈 阅读全文
posted @ 2025-03-01 11:57 lipu123 编辑
摘要:具体更新一条记录UPDATE t_user SET name='xiaolin'WHERE id= 1;的流程如下 执行器负责具体执行,会调用存储引擎的接口,通过主键索引树搜索获取 id =1这一行记录:。 如果 id=1 这一行所在的数据页本来就在 buffer pool中,就直接返回给执行器更新 阅读全文
posted @ 2025-02-27 13:59 lipu123 编辑
摘要:Binlog 的作用及其与 Undo/Redo Log 的区别 在 MySQL 中,Binlog(二进制日志)、Undo Log(撤销日志) 和 Redo Log(重做日志) 是三个不同层级的日志机制,各自承担不同的职责。以下是它们的核心区别及协作关系: 1. Binlog(二进制日志) 定义与作用 阅读全文
posted @ 2025-02-27 12:55 lipu123 编辑
摘要:1. 关于 VARCHAR(255) 的存储长度 问题焦点:为什么 VARCHAR(255) 的“最大字节数”是 255 * 4 = 1020,但实际存储 ASCII 字符时仅占用 2 字节? 解释: 字符集影响:utf8mb4 是变长编码,不同字符占用的字节数不同。例如: ASCII 字符(如英文 阅读全文
posted @ 2025-02-27 09:41 lipu123 编辑
摘要:在 InnoDB 存储引擎中,一条记录的完整结构不仅包含用户定义的列,还包含多个 系统隐藏字段。这些隐藏字段是 InnoDB 实现事务(ACID)、多版本并发控制(MVCC)和索引机制的核心。以下是逐条解析: 1. 用户定义的列(User Columns) 即表结构中用户明确定义的字段,例如 CRE 阅读全文
posted @ 2025-02-26 18:31 lipu123 编辑
摘要:在 InnoDB 存储引擎中,插入操作(INSERT)是否一定会加插入意向锁(Insert Intention Lock) 取决于具体的插入场景和事务隔离级别。以下是详细分析: 1.插入意向锁的作用 设计目标: 提高并发插入效率,允许多个事务在 同一间隙(Gap) 插入 不冲突的记录(如不同主键值) 阅读全文
posted @ 2025-02-26 18:02 lipu123 编辑
摘要:插入意向锁(Insert Intention Lock)与间隙锁(Gap Lock)的区别 在 InnoDB 中,插入意向锁和间隙锁都是用于管理索引间隙(Gap)的锁机制,但它们的 设计目的、加锁行为 和 兼容性规则 有显著不同。以下是两者的核心区别: 定义与设计目标 锁类型 定义 设计目标 间隙锁 阅读全文
posted @ 2025-02-26 16:40 lipu123 编辑
摘要:在 InnoDB 中,间隙锁(Gap Lock) 和 Next-Key Lock 的兼容性规则不同,核心原因在于它们的 锁类型(S/X) 和 锁定范围 的差异。以下是详细解释: 间隙锁(Gap Lock)的兼容性 锁定对象:仅锁定索引记录之间的间隙(例如 (10, 20)),不锁定任何实际存在的记录 阅读全文
posted @ 2025-02-26 16:07 lipu123 编辑
摘要:MySQL InnoDB 引擎的默认隔离级别虽然是「可重复读」,但是它很大程度上避免幻读现象(并不是完全解决了,详见这篇),解决的方案有两种: 针对 快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据 阅读全文
posted @ 2025-02-26 14:54 lipu123 编辑
摘要:Next-Key Lock 和间隙锁(Gap Lock)是 InnoDB 中两种不同的锁机制,它们的设计目标和使用场景有所区别,但都与 防止幻读(Phantom Read) 和 保证范围查询的一致性 密切相关。以下是它们的核心区别和具体应用场景: 定义与作用范围 锁类型 定义 锁定范围 示例(索引值 阅读全文
posted @ 2025-02-26 14:47 lipu123 编辑
摘要:可重复读隔离级是由 MVCC(多版本并发控制)实现的,实现的方式是开始事务后(执行 begin 语句后),在执行第一个查询语句后,会创建一个 Read View,后续的查询语句利用这个 Read View,通过这个 Read View 就可以在 undo log 版本链找到事务开始时的数据,所以事务 阅读全文
posted @ 2025-02-25 18:51 lipu123 编辑

点击右上角即可分享
微信分享提示