首页 > 数据库 >48 结束语 | 点线网面,一起构建MySQL知识网络

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

时间:2023-04-20 15:23:25浏览次数:45  
标签:知识点 48 MySQL 专栏 文章 原理 结束语 id

时光流逝,这是专栏的最后一篇文章。回顾整个过程,如果用一个词来描述,就是“没料到”

我没料到文章这么难写,似乎每一篇文章都要用尽所学;

我没料到评论这么精彩,以致于我花在评论区的时间并不比正文少;

我没料到收获这么大,每一次被评论区的提问问到盲点,都会带着久违的兴奋去分析代码。

如果让我自己评价这个专栏:

我最满意的部分,是每一篇文章都带上了实践案例,也尽量讲清楚了原理;

我最得意的段落,是在讲事务隔离级别的时候,把文章重写到第三遍,终于能够写上“到这里,我们把一致性读、当前读和行锁就串起来了”;

我最开心的时候,是看到评论区有同学在回答课后思考题时,准确地用上了之前文章介绍的知识点。因为我理解的构建知识网络,就是这么从点到线,从线到网,从网到面的过程,很欣喜能跟大家一起走过这个过程。

当然,我更看重的还是你的评价。所以,当我看到你们在评论区和知乎说“好”的时候,就只会更细致地设计文章内容和课后思考题。

同时,我知道专栏的订阅用户中,有刚刚接触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一样,持久化到了你的知识网络里,你和我在这里花费的时间,就是“极客”的时间,就值了。

这是专栏的最后一篇文章的最后一句话,江湖再见。

标签:知识点,48,MySQL,专栏,文章,原理,结束语,id
From: https://www.cnblogs.com/ningxinjie/p/17336999.html

相关文章

  • 47 直播回顾 | 林晓斌:我的 MySQL 心路历程【无音频】
    在专栏上线后的11月21日,我来到极客时间做了一场直播,主题就是“我的MySQL心路历程”。今天,我特意将这个直播的回顾文章,放在了专栏下面,希望你可以从我这些年和MySQL打交道的经历中,找到对你有所帮助的点。这里,我先和你说一下,在这个直播中,我主要分享的内容:我和MySQL打交道的经历;......
  • MySQL常用命令
    查询所有数据库名![image]showdatabases;(https://img2023.cnblogs.com/blog/2805463/202304/2805463-20230420144431240-201364771.png)(使用哪个数据库)use[databasename];(查询数据库下的所有表名)showtables;(查询表中数据)select*from[tablename];(查询表结构)des[tab......
  • MySQL 优化
    Mysql优化总的来说就是尽量提高索引的利用率,和减少全表扫描尽量拆分查询,在程序中处理,一般不要过多连表链接查询一般都是用左小表链接右大表,看情况用左链接还是内连接利用redis进行缓存,并提高缓存命中使用explain进行检查检查索引使用情况,尽量将条件放......
  • Fedora 8下的MySQL源码安装手记
    评:系统开发计划改变!弃PostgreSQL!拥抱MySQL!当然前提是依然支持BerkeleyDB作为存储引擎的MySQL版本,5.1.12版本的MySQL已经正式将BDB从数据库引擎列表中扫地出门,虽然MySQL宣称这和Oracle收购Sleepycat没有任何关系,但是Oracle发面称是公司内部BDB开发团队要求取消支持的,所以也不太清......
  • MySQL InnoDB Architecture 简要介绍
    MySQLInnoDB存储引擎整体架构图:一、内存存储结构 1、BufferPoolbufferpool是主内存中的一块儿存储区域,用于存储访问的表及索引数据。这样从内存中直接访问获取使用的数据可以极大的提升访问效率。在一些特殊专用的服务里,几乎80%的内存区域都被赋于bufferpool。为了......
  • A*B Problem 485 (数学题+九余数定理)
    A*BProblem1000ms |          内存限制:655352设计一个程序求出A*B,然后将其结果每一位相加得到C,如果C的位数大于等于2,继续将C的各位数相加,直到结果是个一位数k。例如:6*8=48;4+8=12;1+2=3;输出3即可。第一行输入一个数N(0<N<=1000000),表示N组测试数据。......
  • mysql重连,连接丢失:The Last Packet Successfully Received From the Server
    源:http://nkcoder.github.io/评:1.1错误信息:Causedby:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:Thelastpacketsuccessfullyreceivedfromtheserverwas20,820,001millisecondsago.Thelastpacketsentsuccessfullytotheserverwas20,82......
  • Mysql经mysql连接的空闲时间超过8小时后 MySQL自动断开该连接解决方案
    评:MySQL的默认设置下,当一个连接的空闲时间超过8小时后,MySQL就会断开该连接,而c3p0连接池则以为该被断开的连接依然有效。假设你的数据库是mysql,如果数据源配置不当,将可能发生经典的“8小时问题”。原因是mysql在默认情况下,如果发现一个连接的空闲......
  • Oracle MySQL Server 拒绝服务漏洞(CVE-2023-21912) 修复
    CVE编号公告标题和摘要最高严重等级受影响的软件CVE-2023-21912OracleMySQLServer拒绝服务漏洞未经身份验证的远程攻击者可通过MySQL协议网络访问MySQLServer,成功利用此漏洞可导致目标MySQLServer挂起或频繁重复崩溃,造成拒绝服务攻击重要MySQLServer<=5.7.41......
  • 提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenumisnull可以在num上设置默认值0,确保表中num列没有null值,然......