![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 93
带你看透 MySQL的真面目
~Maple~
帅
展开
-
吊打面试官之 redo log 详解
不知道大家是否还记得事务的四大特性,现在我们回忆一下吧,持久性、一致性、隔离性、原子性。没错,我们今天讲的就是持久性。 一、啥是 redo log 我们想象有这么一个生产环境,就是如果我们只在内存的 Buffer Pool 中修改了页面,事务提交后突然发生了某个故障,导致内存中的数据都失效了,那么这个已经提交了的事务对数据库中所做的更改也就跟着丢失了,这你能忍?反正我是不能忍。???????????? 这就是持久性遭到了破坏,那我们如何保证持久性呢? 有同学可能说每次事务提交之前把该事务所修改的所有页面都刷原创 2021-11-08 10:56:15 · 3683 阅读 · 2 评论 -
冰冰要我教她 undo log,怎么办
一、事务回滚的需求 我们说过事务需要保证原子性 ,也就是事务中的操作要么全部完成,要么什么也不做。但是偏偏有时候事务执行到一半会出现一些情况,比如: 情况一:事务执行过程中可能遇到各种错误,比如服务器本身的错误,操作系统错误,甚至是突然断电导致的错误。 情况二:程序员可以在事务执行过程中手动输入 ROLLBACK 语句结束当前的事务的执行。 这两种情况都会导致事务执行到一半就结束,但是事务执行过程中可能已经修改了很多东西,为了保证事务的原子性,我们需要把东西改回原先的样子,这个过程就称之为 回滚 (英文原创 2021-11-08 10:55:37 · 104 阅读 · 0 评论 -
表妹问我有哪些索引,我还能不会
上次我们讲了 MySQL 索引的底层原理,现在我们讲讲如何使用 MySQL 索引吧 一、索引的代价 空间上的代价 每建立一个索引都要为它建立一棵 B+ 树,每一棵 B+ 树的每一个节点都是一个数据页,一个页默认会占用 16KB 的存储空间,一棵很大的 B+ 树由许多数据页组 成,那可是很大的一片存储空间呢,我们可是节约资源的好小孩呢 ???????????? 时间上的代价 每次对表中的数据进行增、删、改操作时,都需要去修改各个 B+ 树索引。而且我们讲过, B+ 树每层节点都是按照索引列的值从小到大的顺序原创 2021-11-08 10:54:45 · 85 阅读 · 0 评论 -
不懂 MySQL Buffer Pool,看这篇就够了
我们都知道,MySQL 是基于磁盘存储的数据库,那我们每次查询一个页的记录时都得从磁盘加载整个页进内存然后读取呢,那这样既不是很慢。所以 MySQL 实现了一种叫做 Buffer Pool 的玩意,那 Buffer Pool 是啥玩意呢,我们接着往下看 ???????????? 一、Buffer Pool 其实,Buffer Pool 是 MySQL 服务器向操作系统申请的一片连续的内存区域,我们可以通过 innodb_buffer_pool_size 设置 Buffer Pool 的大小 小贴士:inn原创 2021-11-02 09:08:45 · 365 阅读 · 0 评论 -
吊打面试官之MySQL事务
一、事务的概念 那到底何为事务呢? 我们把需要保证 原子性 、隔离性、 一致性 和 持久性 的一个或多个数据库操作称之为一个事务 它大致分为如下几个状态: 活动的(active) 事务对应的数据库操作正在执行过程中时,我们就说该事务处在 活动的 状态。 部分提交的(partially committed) 当事务中的最后一个操作执行完成,但由于操作都在内存中执行,所造成的影响并没有刷新到磁盘时,我们 就说该事务处在 部分提交的 状态。 失败的(failed) 当事务处在 活动的 或者 部分提交的 状态时,可原创 2021-11-02 09:07:25 · 86 阅读 · 0 评论 -
杰哥教你 MVCC,你听吗
在讲解 MVCC 之前,我们先简单来复习一下事务的四大特性(ACID): 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全 不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独 立的; 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应 该对其有任何影响 今天,我们讲解的就是隔离性 ????????????原创 2021-10-31 10:17:42 · 156 阅读 · 0 评论 -
深入理解MySQL锁
一、简单介绍一下锁结构吧 谈到锁,我们都知道锁的作用,但是我们先来简单讲讲锁的结构吧???????????? 其实锁就是内存中的一个结构,在我们执行一个事务之前,MySQL表中的记录本来是没有锁的,也就是说一开始是没有锁结构和这条锁记录相关联的,如图所示: 如果事务T1想要对这条记录做改动时,它先到内存中查看有没有与这条记录相关联的锁,如果没有这个锁,就会在内存中生成一个锁结构与这条记录关联,如图: 图中表示生成了一个锁结构,但是其中的两个属性是啥意思呢? trx信息:代表这个锁结构是哪个事务生成的原创 2021-10-29 21:52:13 · 180 阅读 · 0 评论 -
吊打面试官之深入浅出 MySQL 索引底层原理
吊打面试官之深入浅出 MySQL 索引底层原理 1、前置知识 在了解 MySQL 索引的底层原理之前,我们需要知道 MySQL 中数据页的相关知识,知道各个数据页可以组成一个双向链表,而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表,每个数据页都会为存储在它里边的记录生成一个页目录,在通过主键查找某条记录的时候可以在页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。页和记录的关系示意图如下: 页a、页b、页c … 页n可以不在物理结构上相连,只要通原创 2021-10-24 15:30:54 · 181 阅读 · 0 评论 -
吊打面试官之 MySQL 中一条 SQL 语句的执行过程
吊打面试官之 MySQL 中一条 SQL 语句的执行过程 前言 在平常的开发中,可能很多人都是 CRUD,对 SQL 语句的语法很熟练,但是说起一条 SQL 语句在 MySQL 中是怎么执行的却浑然不知,今天我就由浅入深,带大家一点点剖析一条 SQL 语句在 MySQL 中是怎么执行的,吊打面试官。本文主要从两个方面,查询语句和更新语句来解析。 一条 SQL 查询语句如何执行的 比如你执行下面这个 SQL 语句时,我们看到的只是输入一条语句,返回一个结果,却不知道 MySQL 内部的执行过程: mysql&原创 2021-09-23 15:22:52 · 198 阅读 · 0 评论