MySQL 实战 45 讲
林晓斌
网名丁奇,腾讯云数据库负责人
189603 人已学习
查看详情
课程目录
已完结/共 49 讲
开篇词 (1讲)
开篇词 | 这一次,让我们一起来搞懂MySQL
时长 06:04
基础篇 (8讲)
01 | 基础架构:一条SQL查询语句是如何执行的?
时长 12:51
02 | 日志系统:一条SQL更新语句是如何执行的?
时长 15:07
03 | 事务隔离:为什么你改了我还看不见?
时长 11:02
04 | 深入浅出索引(上)
时长 15:29
05 | 深入浅出索引(下)
时长 09:52
06 | 全局锁和表锁 :给表加个字段怎么有这么多阻碍?
时长 13:02
07 | 行锁功过:怎么减少行锁对性能的影响?
时长 11:32
08 | 事务到底是隔离的还是不隔离的?
时长 19:05
实践篇 (37讲)
09 | 普通索引和唯一索引,应该怎么选择?
时长 15:40
10 | MySQL为什么有时候会选错索引?
时长 17:29
11 | 怎么给字符串字段加索引?
时长 12:48
12 | 为什么我的MySQL会“抖”一下?
时长 15:37
13 | 为什么表数据删掉一半,表文件大小不变?
时长 14:37
14 | count(*)这么慢,我该怎么办?
时长 15:23
15 | 答疑文章(一):日志和索引相关问题
时长 20:20
16 | “order by”是怎么工作的?
时长 17:01
17 | 如何正确地显示随机消息?
时长 16:28
18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?
时长 15:36
19 | 为什么我只查一行的语句,也执行这么慢?
时长 12:21
20 | 幻读是什么,幻读有什么问题?
时长 19:27
21 | 为什么我只改一行的语句,锁这么多?
时长 17:38
22 | MySQL有哪些“饮鸩止渴”提高性能的方法?
时长 14:47
23 | MySQL是怎么保证数据不丢的?
时长 17:04
24 | MySQL是怎么保证主备一致的?
时长 19:52
25 | MySQL是怎么保证高可用的?
时长 17:23
26 | 备库为什么会延迟好几个小时?
时长 23:17
27 | 主库出问题了,从库怎么办?
时长 19:55
28 | 读写分离有哪些坑?
时长 21:22
29 | 如何判断一个数据库是不是出问题了?
时长 14:31
30 | 答疑文章(二):用动态的观点看加锁
时长 15:43
31 | 误删数据后除了跑路,还能怎么办?
时长 15:31
32 | 为什么还有kill不掉的语句?
时长 13:38
33 | 我查这么多数据,会不会把数据库内存打爆?
时长 14:33
34 | 到底可不可以使用join?
时长 16:42
35 | join语句怎么优化?
时长 16:39
36 | 为什么临时表可以重名?
时长 16:07
37 | 什么时候会使用内部临时表?
时长 13:54
38 | 都说InnoDB好,那还要不要使用Memory引擎?
时长 14:00
39 | 自增主键为什么不是连续的?
时长 17:34
40 | insert语句的锁为什么这么多?
时长 12:18
41 | 怎么最快地复制一张表?
时长 13:30
42 | grant之后要跟着flush privileges吗?
时长 12:54
43 | 要不要使用分区表?
时长 12:51
44 | 答疑文章(三):说一说这些好问题
时长 16:21
45 | 自增id用完怎么办?
时长 17:07
特别放送 (1讲)
直播回顾 | 林晓斌:我的 MySQL 心路历程
时长 18:43
结束语 (1讲)
结束语 | 点线网面,一起构建MySQL知识网络
时长 08:01
结课测试 (1讲)
结课测试|这些MySQL知识你都掌握了吗?
时长 00:28
MySQL 实战 45 讲
15
15
2.0x
00:00/08:01

结束语 | 点线网面,一起构建MySQL知识网络

讲述:林晓斌大小:7.33M时长:08:01
时光流逝,这是专栏的最后一篇文章。回顾整个过程,如果用一个词来描述,就是“没料到”
我没料到文章这么难写,似乎每一篇文章都要用尽所学;
我没料到评论这么精彩,以致于我花在评论区的时间并不比正文少;
我没料到收获这么大,每一次被评论区的提问问到盲点,都会带着久违的兴奋去分析代码。
如果让我自己评价这个专栏:
我最满意的部分,是每一篇文章都带上了实践案例,也尽量讲清楚了原理;
我最得意的段落,是在讲事务隔离级别的时候,把文章重写到第三遍,终于能够写上“到这里,我们把一致性读、当前读和行锁就串起来了”;
我最开心的时候,是看到评论区有同学在回答课后思考题时,准确地用上了之前文章介绍的知识点。因为我理解的构建知识网络,就是这么从点到线,从线到网,从网到面的过程,很欣喜能跟大家一起走过这个过程。
当然,我更看重的还是你的评价。所以,当我看到你们在评论区和知乎说“好”的时候,就只会更细致地设计文章内容和课后思考题。
同时,我知道专栏的订阅用户中,有刚刚接触 MySQL 的新人,也有使用 MySQL 多年的同学。所以,我始终都在告诫自己,要尽量让大家都能有所收获。
在我的理解里,介绍数据库的文章需要有操作性,每一个操作有相应的原理,每一个原理背后又有它的原理,这是一个链条。能够讲清楚链条中的一个环节,就可能是一篇好文章。但是,每一层都有不同的受众。所以,我给这 45 篇文章定的目标就是:讲清楚操作和第一层的原理,并适当触及第二层原理。希望这样的设计不会让你觉得太浅。
有同学在问 MySQL 的学习路径,我在这里就和你谈谈我的理解。

1. 路径千万条,实践第一条

如果你问一个 DBA“理解得最深刻的知识点”,他很可能告诉你是他踩得最深的那个坑。由此,“实践”的重要性可见一斑。
以前我带新人的时候,第一步就是要求他们手动搭建一套主备复制结构。并且,平时碰到问题的时候,我要求要动手复现。
从专栏评论区的留言可以看出来,有不少同学在跟着专栏中的案例做实验,我觉得这是个非常好的习惯,希望你能继续坚持下去。在阅读其他技术文章、图书的时候,也是同样的道理。如果你觉得自己理解了一个知识点,也一定要尝试设计一个例子来验证它。
同时,在设计案例的时候,我建议你也设计一个对照的反例,从而达到知识融汇贯通的目的。就像我在写这个专栏的过程中,就感觉自己也涨了不少知识,主要就得益于给文章设计案例的过程。

2. 原理说不清,双手白费劲

不论是先实践再搞清楚原理去解释,还是先明白原理再通过实践去验证,都不失为一种好的学习方法,因人而异。但是,怎么证明自己是不是真的把原理弄清楚了呢?答案是说出来、写出来。
如果有人请教你某个知识点,那真是太好了,一定要跟他讲明白。不要觉得这是在浪费时间。因为这样做,一来可以帮你验证自己确实搞懂了这个知识点;二来可以提升自己的技术表达能力,毕竟你终究要面临和这样的三类人讲清楚原理的情况,即:老板、晋升答辩的评委、新工作的面试官。
我在带新人的时候,如果这一届的新人不止一个,就会让他们组成学习小组,并定期给他们出一个已经有确定答案的问题。大家分头去研究,之后在小组内进行讨论。如果你能碰到愿意跟你结成学习小组的同学,一定要好好珍惜。
而“写出来”又是一个更高的境界。因为,你在写的过程中,就会发现这个“明白”很可能只是一个假象。所以,在专栏下面写下自己对本章知识点的理解,也是一个不错的夯实学习成果的方法。

3. 知识没体系,转身就忘记

把知识点“写下来”,还有一个好处,就是你会发现这个知识点的关联知识点。深究下去,点就连成线,然后再跟别的线找交叉。
比如,我们专栏里面讲到对临时表的操作不记录日志,然后你就可以给自己一个问题,这会不会导致备库同步出错?再比如,了解了临时表在不同的 binlog 格式下的行为,再追问一句,如果创建表的时候是 statement 格式,之后再修改为 row 格式(或者反之),会怎么样呢?
把这些都搞明白以后,你就能够把临时表、日志格式、同步机制,甚至于事务机制都连起来了。
相信你和我一样,在学习过程中最喜欢的就是这种交叉的瞬间。交叉多了,就形成了网络。而有了网络以后,吸收新知识的速度就很快了。
比如,如果你对事务隔离级别弄得很清楚了,在看到第 45 篇文章讲的 max_trx_id 超限会导致持续脏读的时候,相信你理解起来就很容易了。

4. 手册补全面,案例扫盲点

有同学还问我,要不要一开始就看手册?我的建议是不要。看手册的时机,应该是你的知识网络构建得差不多的时候。
那你可能会问,什么时候算是差不多呢?其实,这没有一个固定的标准。但是,有一些基本实践可以帮你去做一个检验。
能否解释清楚错误日志(error log)、慢查询日志(slow log)中每一行的意思?
能否快速评估出一个表结构或者一条 SQL 语句,设计得是否合理?
能否通过 explain 的结果,来“脑补”整个执行过程(我们已经在专栏中练习几次了)?
到网络上找 MySQL 的实践建议,对于每一条做一次分析:
如果觉得不合理,能否给出自己的意见?
如果觉得合理,能否给出自己的解释?
那,怎么判断自己的意见或者解释对不对呢?最快速、有效的途径,就是找有经验的人讨论。比如说,留言到我们专栏的相关文章的评论区,就是一个可行的方法。
这些实践做完后,你就应该对自己比较有信心了。这时候,你可以再去看手册,把知识网络中的盲点补全,进而形成面。而补全的方法就是前两点了,理论加实践。
我希望这 45 篇文章,可以在你构建 MySQL 知识体系的过程中,起到一个加速器的作用。
我特意安排在最后一篇文章,和你介绍 MySQL 里各种自增 id 达到定义的上限以后的不同行为。“45”就是我们这个专栏的 id 上限,而这一篇结束语,便是超过上限后的第一个值。这是一个未定义的值,由你来定义:
有的同学可能会像表定义的自增 id 一样,就让它定格在这里;
有的同学可能会像 row_id 一样,二刷,然后用新的、更全面的理解去替代之前的理解;
也许最多的情况是会像 thread_id 一样,将已经彻底掌握的文章标记起来,专门刷那些之前看过、但是已经印象模糊的文章。
不论是哪一种策略,只要这 45 篇文章中,有那么几个知识点,像 Xid 或者 InnoDB trx_id 一样,持久化到了你的知识网络里,你和我在这里花费的时间,就是“极客”的时间,就值了。
这是专栏的最后一篇文章的最后一句话,江湖再见。
公开
同步至部落
取消
完成
0/2000
划线
笔记
复制

171人觉得很赞给文章提建议

unpreview
天然
Ctrl + Enter 发表
0/2000字符
提交留言

精选留言(269)

  • HuaMax
    不说再见,让我们再建一张表,从0开始!

    作者回复: 哈哈,👍再建一张表 如果有下个系列,我一定用这个做开头😆

    2019-02-27
    3
    279
  • 18岁的马化腾
    我:喂! 老师:怎么了 我:去哪啊 老师:回家 我:然后呢 老师:上班啊 …… 我:不上班行不行 老师:不上班你养我啊 我:喂! 老师:又怎么了 我:我订阅你啊 老师:先把这期钱付了再说死鬼

    作者回复: 手动惊讶😺

    2019-03-01
    7
    136
  • 独家记忆
    老师辛苦了
    2019-02-27
    63
  • 南友力max先森🌈
    极客时间最好专栏
    2019-03-09
    51
  • 可可
    感谢老师,最近一次面试,靠着在这学到的MySQL知识,顺利通过面试。 再次感谢

    作者回复: 👍 听到这个消息替你开心🤝

    2019-03-20
    44
  • Stalary
    感谢老师,是我学的最棒的课了,每次老师都会认真回答我的问题,谢谢~

    作者回复: 谢谢你提的好问题🤝

    2019-02-27
    37
  • Geek_6a3c4b
    看了35天,终于刷完了,感觉这个专栏是我在极客上看到的价值最高,最棒的专栏。感谢老师!
    2021-08-04
    35
  • 憶海拾貝
    这是我在极客时间第一篇跟着从开始到结束的专栏,进度偶尔落下也抓紧时间补上. 正是丁奇老师的用心, 才有我们的收获良多. 辛苦啦!

    作者回复: 也谢谢你的支持。这个留言时间…确认了是真爱😄 大家有收获我是真开心

    2019-02-27
    25
  • 清风
    老师的文章我用来一个月看完了一遍,感觉对mysql的底层原理懂了,但是我发现那是假的。于是我又读了一遍,整理成了自己话术与语言。发现mysql 的redolog 和binlog 机制在很多框架中都有相似的影子。2段提交、分布式事务等等。 之前在网上看了很多博客,发现写了很多错误知识点。我敢说这是我在极客时间里面买到的课程中,能让我看上2遍的文章。非常感谢老师!

    作者回复: 👍 这种感觉是很好的🤝

    2019-03-22
    18
  • 天,很蓝 ~
    经过两个月的学习,终于学完了整个课程。想着也要写一下自己的感受和成长,从内心讲,不管是课程内容还是对学员的问题解答,丁奇老师做的都是我看过的专栏中最好的一个。我自己也受益颇深,从最初的只会增删改查到现在可以说已经初具功力。学完之后我还专门挑了join那个章节做了ppt为团队小伙伴做了分享,得到了小伙伴的一致好评,说比dba的分享都靠谱,听完实在是太开心了。后续我还会再刷第二遍,第二遍就会结合实践深挖,我相信收获会更大,再次感谢老师,谢谢您的付出!但愿江湖有缘相见

    作者回复: 👍 看到你说分享后得到小伙伴认同,太开心啦👍

    2019-04-05
    17
  • chenming886
    终于跟随着林老师步伐走过了这四十多讲!让我每天地铁的行程不在漫长!谢谢

    作者回复: 👍 想起来我以前在北京上班的时候,每天坐40分钟地铁😆

    2019-02-27
    16
  • allean
    江湖路远,有缘再见

    作者回复: 江湖路远,有缘再见 🤝

    2019-02-27
    16
  • Robin
    今天我才结业,收获良多,开发中我成了MySQL专家,很不舍就这么结束了。

    作者回复: “开发中我成了MySQL专家” 👍👍

    2020-03-26
    12
  • 星期六男爵
    值得二刷
    2019-02-27
    11
  • 有财君
    我仔仔细细的读完了专栏,同样的,我也在其他的地方参加过MySQL的课程,有便宜的,有不要钱的,有贵的,总的来说极客时间的MySQL实战45讲非常贴合实际,学习曲线平滑,适合那些刚入门还有点糊涂的DBA,也适合有了比较丰富经验的DBA。 这门课有实战,有深度,有思考,除了教会纸面写出来的东西之外,也是引了一条路给诸位,感谢老师。 在此也建议各位,MySQL的课程没必要买太贵的,开源软件,什么不懂就去看文档,文档不详细就去看代码。
    2019-11-18
    10
  • ryp
    老师讲得太棒了。本人2月12日发现了老师的专栏然后上的车,每天使劲刷,现在终于刷完了。本人做java开发,用mysql快2年了。之前虽然会写各种很复杂的sql,但是对底层原理并不清楚。经过这十几天的学习,本人充分领略到了mysql的各种底层原理和深坑。感谢老师!一周后,本人定会再次回来复习一遍。

    作者回复: 👍 平均一天两篇,很有拼劲👍

    2019-03-02
    4
    11
  • laurent(主任)
    道路千万条,丁总第一条

    作者回复: 用户名暴露了你😆😆

    2019-05-19
    9
  • 冷笑的花猫
    感谢老师,一期不落的学习了,虽然有很多不理解的地方,但会努力的二刷,三刷去弄懂他。以后有问题在留言板留言的时候,希望老师能百忙之中抽空回答下,最后再次感谢老师。

    作者回复: 会的会的,评论区继续开放,也感谢你们一路陪伴^_^

    2019-02-27
    8
  • wuhan07
    业务开发同学,刷了两遍,非常受教
    2021-06-30
    8
  • 阿卧
    这个专栏把mysql讲的很全面,作为java开发也一期不落的看完了。评论区也有很多大神与老师互动,我在旁边偷学偷看。专栏里面的内容好多没有消化,打算二刷。重点看些开发需要用到的,比如:锁、索引、事务、主从同步,explain分析执行过程。也尽可能的根据自己的理解和实践来总结这些知识点。
    2019-03-22
    7
收起评论
99+
99+
返回顶部