如何学习mysql

        继反思后,打算从mysql入手,先专精一个,然后再拓展。mysql平时工作也用得多。 学习前,看看前人是如何学习的,正所谓:它山之玉可以攻石。这样方向也更清楚。同理学习其它的也是一样,先看看攻略,再行动。

在知乎上,看到一篇很好的文章,值得收藏和反复看

作者:柳树

链接:零基础如何自学MySQL数据库? - 知乎

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

   最近写了很多 MySQL 的文章,也有很多同学问我是怎么学的、有什么好的书籍资料推荐,于是捣腾了一下,把毕生所学,写了下来。

学一项技术,我习惯分成 3 个等级,像打怪练级一样去学它:

  • Level 1 - 学会使用它
  • Level 2 - 弄懂背后的原理
  • Level 3 - 学会怎么优化它

另外还有 Level 4,留到最后再讲。

原则:

在学习过程中,有两条原则:

第一,在这个练级的过程中,要不断的思考和实践

第二,你可以在这 3 个等级之间来回穿梭

先来说第一条原则 —— 不断的思考和实践。

当你学习如何使用 MySQL 时,你要思考,为什么这样的调用会产生这样的结果:

  • 为什么有的 sql 很慢,有的 sql 很快
  • 为什么我事务A还没提交,事务B就感知到了
  • 为什么 innodb 是默认的存储引擎

......

你在思考什么?其实你在思考 Level 2 里要解决的问题 —— 技术背后的原理。

为什么这样的输入,会产生这样的输出,弄懂这些,MySQL 对你而言就不再是一个黑盒。

而当你在弄懂 MySQL 内部原理的过程中,你要思考,既然 MySQL 是这么实现的,那我可以做些什么来优化它?

  • 既然索引结构是 B+ 树,那么该怎么设计 sql 语句,该怎么设计索引?
  • 既然有数据缓存池,那内存大小该怎么设置才合理?
  • 既然 redo log 要写磁盘,那么可以怎么提升写磁盘的效率?

你在思考什么?没错,你还是在思考下一个 Level 要解决的问题 —— 怎么优化它。

上个 Level 的输出会成为下个 Level 的输入,产生输出的前提是不断的思考。

思考让你学的更多更深,但是却不一定能帮助你解决实际问题,所以你还要用实践来检验自己是不是真的弄懂了,有三种方式可以检验

1、用实际工作项目检验自己

在工作中能用到你学的东西是最好不过的,MySQL,相信大家都会用到,线上出了慢查询、死锁,别管是不是你的锅,赶紧主动抢过来排查;

2、用面试题检验自己

这个很好做,面试题网上一搜一大把,可以模拟下面试,如果你被问到这些问题,你会怎么回答;

3、用写作检验自己

这个是三种检验方法里最耗能量的,但我觉得也是收益最持久的:

  • 首先,知识学了容易忘记,但是当你把它写下来了,就随时可以找回这些记忆。
  • 其次,你在写作的过程中,会不断的审视自己的观点,在写的时候,你会觉得,哎,这里好像缺了什么,写不下去,其实就是你自己在写的时候,对自己提出了质疑。你在写出来的过程中,会不断向自己提问,从而让自己学的更深,弄得更懂。
  • 最后,这也是打造个人品牌,扩大自身影响力的方式。

这就是第一条原则,不断思考和实践。

接着再先来说第二条原则 —— 你可以在这 3 个等级之间来回穿梭。

这 3 个等级并不是对整项技术而言的,而是指对这项技术的具体某个知识点的掌握程度。

举个例子,你可能学会怎么写 sql,学会 sql 背后的实现以及如何对 sql 进行调优,对于 sql 你已经是 Level 3 了,但是这时候你接触到了分库分表,而对于分库分表而言,你其实只是 Level 1 的水平,这下你就又得躬身入局,谦虚的学习,努力的练级了。

我一直认为所谓的学习路线,都不是一条路走到底的,而是迂回的。

保持一份空杯的心态非常重要,时刻准备好承认自己对于知识的无知,谦虚的从零学起,而不是觉得自己解决了某个非常牛逼的问题后,就把自己捧上神坛,觉得自己无所不知。

现在回到题主的问题,对于 MySQL,在这 3 个 Level 里,我分别会推荐这些书籍和文档:

Level

Level 1 - 学会使用 MySQL

其实如果你英文很牛逼的话,我肯定是推荐官方文档的,上面什么都有,属于 Level 1 的有:

  • MySQL 安装:Installing and Upgrading MySQL,官方给的安装文档,你还不放心?各种操作系统的都有,这下不用装环境装到骂娘了
  • MySQL Hello World:Tutorial ,带你过一把操作 MySQL 的快感
  • Sql 语句大全:SQL Statements,全部 SQL 语句,都在这了

链接的 url 里带有 MySQL 的版本号,比如我这里贴的是 8.0 的,你要是装的 5.7,换一下就好了,再也不用照着别人的文档操作,结果最后操作出来不一样,还跑去人家博客下面骂,结果是因为版本不一致,啪啪打脸。

不过很多人要是上来就看英文文档,估计很快就从入门到放弃了,所以如果英文不太好的同学,还是找一本比较有趣的书看吧,英文不错的同学,也可以书籍和官方文档结合着看。

Level 1,刚入门嘛,开心最重要。

书籍推荐:《MySQL必知必会》,豆瓣评分 8.4,这本书写的那叫利索。

有人要问了,书那么厚,要全部读完吗?

这就是没认真听讲,刚刚都说了,你可以在 Level 1 ~ Level 3 之间不停地来回跳跃、穿梭、蹦跶,有些看起来比较复杂的知识点,快速刷过去,有个印象就够了。

Level 2 - 弄懂 MySQL 背后的原理

推荐:

  • 《MySQL技术内幕 : InnoDB存储引擎》

配套阅读:

  • 《高性能 MySQL》
  • MySQL 官方文档

延伸阅读:

  • 《数据库系统概念》

《MySQL技术内幕 : InnoDB存储引擎》这本书讲了很多 Innodb 存储引擎的实现原理,在 Level 2,你可以以这本书为主要参考,配套着《高性能 MySQL》,这本虽然侧重性能调优,但是也讲解了很多原理的知识,以及 MySQL 官方文档,书籍难免会有过时和纰漏,当产生疑问时,到最权威的地方寻找答案是最靠谱的,当然别忘了谷歌和 Stackoverflow。

如果还有余力,可以看下《数据库系统概念》,有人建议把这本书放到入门,我觉得这样又会把很多人从入门到放弃了,这是我学习的一个原则,不要上来就啃黑皮书(就是机械工业出版社的那些封面是黑色的书)。

这本书适合什么时候看呢?适合你已经玩过数据库了,用过了,并且对原理有一定了解了,这时候过来看,你会发现,你之前学的东西,对于其他关系型数据库,甚至 NoSQL、分布式数据库,居然也适用,真是奇妙。

Level 3 - 学会怎么优化 MySQL

推荐:

  • 《高性能 MySQL》

配套阅读:

  • 《MySQL技术内幕 : InnoDB存储引擎》
  • MySQL 官方文档

延伸阅读:

  • 《数据库系统概念》
  • 《数据库索引设计与优化》

呃,你没看错,我只是把《高性能 MySQL》放到了「推荐」,《MySQL技术内幕 : InnoDB存储引擎》挪到了「配套阅读」,原因还是上面说的,这两本书其实讲原理和讲优化的都有,只是侧重点不同,如果你在其中一本找不到答案,或者觉得里面的解释很牵强,就去另一本书里找,还找不到,就到 MySQL 官方文档 找,还找不到,就谷歌,就 Stackoverflow.

延伸阅读里多了一本书 —— 《数据库索引设计与优化》,这本书厉害了,光索引能给你写这么厚一本书,而且还让人读起来很顺畅,感觉一气呵成,索引的三星标准,也是书里提出来的。

记住你是可以在不同 Level 之间来回穿梭的,所以这些书,都要放在你书桌旁边,放到你伸手就能够着的地方,方便你随时翻阅。

最后,开头提的 Level 4,在下斗胆,推荐阅读:

  • 《数据库系统概念》
  • 《数据库索引设计与优化》
  • 《数据库系统实现》
  • MySQL 官方开发手册:MySQL Internals Manual
  • ......

这是想干嘛?

没错,这是要成为数据库专家,你都学到这分上了,难道还只满足于做一个 DBA 吗?

当知识学的足够深入时,你会发现你学到了一些领域通用的能力,这也是我推荐了三本讲数据库通识的书的原因,尤其是 《数据库系统概念》,我是从 Level 2 推荐到 Level 4,这本书是值得没事就拿来翻翻,找一两个章节阅读的。

还推荐了 MySQL 官方开发手册:MySQL Internals Manual,这又是想干嘛?

其实这是我之前提的 —— 「实践」,你都已经学的这么深了,觉得自己对 MySQL 调优了如指掌,对数据库也学的如此透彻,这时候,为何不尝试一下阅读一下 MySQL 的源码,甚至给它提交代码呢?

好了不吹牛了,这个 Level 4 只是我的一个想法,毕竟本人也志不在此,我觉得我可以在 Level 2 和 3 之间就已经很不错了,只是知道有 Level 4 的存在,会让我自己知道自己还有很多不知道,让自己变得谦虚一些。

推荐的书籍

1,系统学习数据库,最要紧的是把基本功打牢,所以《数据库系统概念 原书第六版》是一本不可多得的好书,任何数据库背后的原理基本上都是想通的,其他的都是不同厂商或组织做的改进和优化;

2,如果对MySQL题体系结构、原理性的东西没搞明白,就阅读优化相关的书,我觉得是徒劳,因为原理不懂,何谈优化?所以这里可以推荐两本本书籍:《深入理解MySQL》(人民邮件出版社 Charles A Bell著 杨涛等译)、《深入理解MySQL核心技术》(O'REILLY出版社 中国电力出版社 Sasha Pachev著 李芳等译);

3,对原理性的东西弄彻底后,再加上足够多的操练,现在可以看些优化、高可用、备份与恢复、集群、优化的书,比如前辈提到的《高性能MySQL》(O'REILLY出版社 电子工业出版社 Baron Schwartz等著 王小东等译)、《MySQL性能调优与架构设计》(简朝阳),其他的书籍比如《高可用MySQL——构建健壮的数据中心》(O'REILLY出版社 电子工业出版社 Charles Bell等著 宁青等译)

感想

文章里面谈到的三种方式真的重要!

1、用实际工作项目检验自己

尤其线上出了慢查询、死锁,别管是不是你的锅,赶紧主动抢过来排查。主体去做,去承担,这样就有更多的机会。自己搞不定的,看看大佬是如何解决的,跟大佬多探讨。

2、用面试题检验自己

这个很好做,面试题网上一搜一大把,可以模拟下面试,如果你被问到这些问题,你会怎么回答; 有空的时候,就可以去看看,去检验自己。

3、用写作检验自己

这个是稳赚不赔的。写作不仅是记录,也会激发自己重新去思考。

推而广之,学习其它内容大体也是如此。

总结:

        学习前,先找攻略,看看前人是如何做的。定好目标,制定计划,然后是不断行动了!学习的过程是漫长的,需要不断去激励自己! 最后用《暗时间》里面摘抄的笔记来提醒自己,去培养好的习惯。

1,整天把你要做的事情,要学习的东西常驻在你的大脑,时刻给予它最高的优先级。你走路、吃饭、做梦的时候,心心念念想的就是这件事情。你走路、买菜、洗脸洗手、坐公车、逛街、出游、吃饭、睡觉,所有这些时间都可以成为“暗时间”,你可以充分利用这些时间进行思考,反刍和消化平时看着读的东西

  

2,一次只做一次任务,减少任务切换的消耗。

  

3,创造大块的时间来阅读重要的东西,

4,在有干扰的环境下看书,另外经常利用各种碎片时间阅读和思考,去培养抗干扰的能力。

   

5,养成习惯,经常主动回顾一段时间学习到的东西

  

6,经常与别人讨论,或者讲给别人听。 

  

7,做读书笔记  将自己阅读时候的思考(包括)闪念总结下来,并定期整理笔记

  

8,要事第一,把最集中注意力的时间利用在最重要的事情上。

9,趁着对一件事情有热情的时候,一股脑儿把万事开头那个最难的阶段熬过去

  

10,重要的事情优先。尽量避免琐事骚扰,不重要的事情能不做就不做 。 重要的事情要营造比较大块的时间来完成 

  

11,学习和思考的过程中常问自己的几个问题:

        1),你的问题到底是什么?(提醒自己思考不要偏离问题)

        2),OK,到现在为止,我到底有什么收获呢?(提醒自己时不时去总结,整理学习的东西)

        3),设想自己正在将东西讲给别人听(有声思考:能否讲出来是判断是否真正理解的最佳方法)

        4),设想需要讲给一个不懂的人听(迫使自己去挖掘知识背后最本质、往往也是最简单的解释)

        5),时常反省和注意自己的思维过程。

        6),养成反驳自己的想法的习惯。

  

12,重视提前积累的强大力量 计划订长一点 

    一个5年计划便可以让你获得从现在开始的5年准备时间。5年中每天腾出半个到一个小时专心于某一件事情,认准一个方向,每次走一点,其实不要说5年,两年就会发现起到宏大的效应。

  

   除了重要的一日三省,加上一些认知技巧,知难而进嘛,值得做的事情总是如此。

  

你可能感兴趣的:(mysql,学习,mysql)