参考极客时间专栏<MySQL实战45讲>学习笔记 一.基础篇(8讲) MySQL实战45讲学习笔记:第一讲 MySQL实战45讲学习笔记:第二讲 MySQL实战45讲学习笔记:第三讲 MySQL实战45讲学习笔记:第四讲 MySQL实战45讲学习笔记:第五讲 MySQL实战45讲学习笔记:第六讲 MySQL实战45讲学习笔记:第七讲 MySQL实战45讲学习笔记:第八讲 二.实践篇-索引(8讲) MySQL实战45讲学习笔记:第九讲 MySQL实战45讲学习笔记:第十讲 MySQL实战45讲学…
一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧凑. 之前我见过有的业务设计依赖于自增主键的连续性,也就是说,这个设计假设自增主键是连续的.但实际上,这样的假设是错的,因为自增主键不能保证连续递增. 今天这篇文章,我们就来说说这个问题,看看什么情况下自增主键会出现 “空洞”? 为了便于说明,我们创建一个表 t,其中 id 是自增主键字段.c 是唯…
一.本节概述 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长.虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限.比如,无符号整型 (unsigned int) 是 4 个字节,上限就是 2 -1. 既然自增 id 有上限,就有可能被用完.但是,自增 id 用完了会怎么样呢? 今天这篇文章,我们就来看看 MySQL 里面的几种自增 id,一起分析一下它们的值达到上限以后,会出现什么情况. 二.表定义自增值 id 说到自增…
一.引子 在今天这篇答疑文章更新前,MySQL 实战这个专栏已经更新了 14 篇.在这些文章中,大家在评论区留下了很多高质量的留言.现在,每篇文章的评论区都有热心的同学帮忙总结文章知识点,也有不少同学提出了很多高质量的问题,更有一些同学帮忙解答其他同学提出的问题. 在浏览这些留言并回复的过程中,我倍受鼓舞,也尽我所知地帮助你解决问题.和你讨论.可以说,你们的留言活跃了整个专栏的氛围.提升了整个专栏的质量,谢谢你们.评论区的大多数留言我都直接回复了,对于需要展开说明的问题,我都拿出小本子记了下来.…
一.隔离性与隔离级别 1.事务的特性 原子性 一致性 隔离性 持久性 2.不同事务隔离级别的区别 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到.读已提交:别人改数据的事务已经提交,我在我的事务中才能读到.可重复读:别人改数据的事务已经提交,我在我的事务中也不去读.串行:我的事务尚未提交,别人就别想改数据.这4种隔离级别,并行性能依次降低,安全性依次提高. 3.读提交”和“可重复读” 假设数据表T中只有一列,期中一行的值为1,下面是按照时间顺序执行两个事物的行为 mysql> cre…
一.今日内容概要 今天的正文开始前,我要特意感谢一下评论区几位留下高质量留言的同学.用户名是 @某.人 的同学,对文章的知识点做了梳理,然后提了关于事务可见性的问题,就是先启动但是后提交的事务,对数据可见性的影响.@夏日雨同学也提到了这个问题,我在置顶评论中回复了,今天的文章末尾也会再展开说明.@Justin 和 @倪大人两位同学提了两个好问题. 对于能够引发更深一步思考的问题,我会在回复的内容中写上“好问题”三个字,方便你搜索,你也可以去看看他们的留言. 非常感谢大家很细致地看文章,并且留下了…
一.引子 在前面的文章中,我不止一次地和你提到了 binlog,大家知道 binlog 可以用来归档,也可以用来做主备同步,但它的内容是什么样的呢?为什么备库执行了 binlog 就可以跟主库保持一致了呢?今天我就正式地和你介绍一下它. 毫不夸张地说,MySQL 能够成为现下最流行的开源数据库,binlog 功不可没. 在最开始,MySQL 是以容易学习和方便的高可用架构,被开发人员青睐的.而它的几乎所有的高可用架构,都直接依赖于 binlog.虽然这些高可用架构已经呈现出越来越复杂的趋势,但都…
一.引子 在上一篇文章中,我和你介绍了几种可能导致备库延迟的原因.你会发现,这些场景里,不论是偶发性的查询压力,还是备份,对备库延迟的影响一般是分钟级的,而且在备库恢复正常以后都能够追上来. 但是,如果备库执行日志的速度持续低于主库生成日志的速度,那这个延迟就有可能成了小时级别.而且对于一个压力持续比较高的主库来说,备库很可能永远都追不上主库的节奏. 这就涉及到今天我要给你介绍的话题:备库并行复制能力. 二.备库并行复制能力 1.在官方的 5.6 版本之前,MySQL 只支持单线程复制 为了便于…
一.引子 平时的工作中,不知道你有没有遇到过这样的场景,一条 SQL 语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,并且这样的场景很难复现,它不只随机,而且持续时间还很短. 看上去,这就像是数据库“抖”了一下.今天,我们就一起来看一看这是什么原因. 二.你的 SQL 语句为什么变“慢”了 在前面第 2 篇文章<日志系统:一条 SQL 更新语句是如何执行的?>中,我为你介绍了WAL 机制.现在你知道了,InnoDB 在处理更新语句的时候,只做了写日志这一个磁盘操作.这个…
一.引子 在上一篇文章中,我和你介绍了间隙锁和 next-key lock 的概念,但是并没有说明加锁规则.间隙锁的概念理解起来确实有点儿难,尤其在配合上行锁以后,很容易在判断是否会出现锁等待的问题上犯错. 所以今天,我们就先从这个加锁规则开始吧. 首先说明一下,这些加锁规则我没在别的地方看到过有类似的总结,以前我自己判断的时候都是想着代码里面的实现来脑补的.这次为了总结成不看代码的同学也能理解的规则,是我又重新刷了代码临时总结出来的.所以,这个规则有以下两条前提说明: 1. MySQL 后面的…