Hello 大家好,我是李辉,目前是新加坡某家大型跨国互联网公司的 DBA 资深专家,常用网名门牙没了混迹江湖。
从学校毕业以后,我就开始从事 MySQL DBA 的相关工作,到今天算下来也有将近 10 年了。在这 10 年的时间里,我也经历了从职场实习生到 DBA 主管再到资深专家的一个过程。
现在回顾之前的工作历程,刚毕业的时候,我的数据库水平其实是很差的。在刚工作的那几年,由于公司处于业务的爆发增长期,每天最重要的事情就是支撑线上业务,因此积累的数据库相关的技能与经验也非常碎片化,没有构成完整的知识体系。
直到后来一个偶然的机会,朋友邀请我入伙一起做一个 MySQL 的技术培训,这可是个难得的锻炼自己的机会,我想都没想就答应下来了。
在准备培训内容的那段时期,才开始发现自己的内功并不是那么的深厚。担心会误人子弟,于是我去网上把 MySQL 相关的技术书籍都购买了回来,开始没日没夜的阅读。
在朋友的指导下,以及事先做好的这些功课,我们最终圆满的完成了这期 MySQL 技术培训,悬着的心终于松了一口气。得益于此,我的 MySQL 技术体系也有了一个质的飞跃,在后来换工作的时候,拿到了多个大厂的 offer。
在互联网公司工作了很多年,在日常的工作中,每天都需要和程序员们沟通业务。在和他们打交道的过程中,至今仍然让我头痛的就是 MySQL 相关的一些问题。
“为毛不让上线?” “为毛不能这样用,非要改?” “你们 DBA 是不是非要卡我们一下刷个存在感?”
每当面对这样的场景,我只能表示无可奈何(手动摊手),一次又一次的给他们解释,这个地方为什么要这么用,这个地方为什么要这么设计,等等等等。但是互联网行业的工作速度如行军打仗,在 deadline 面前,所有的解释和努力都是苍白的,最后只好带着一堆的问题匆匆上线。
那应该如何解决这些问题?在我还在前东家新浪彩票工作的时候,曾经花了大半年的时间去处理这些问题:制定 MySQL 开发规范,给他们培训 MySQL 相关的知识。最终成效显著,程序员们都规规矩矩的按照 DBA 的开发规范来设计数据模型,该用 tinyint 的地方绝不用 int,不让用外键的地方就老老实实撤掉外键,可能产生锁的事务就仔细做设计,等等不一一举例。
那么是我们制定的开发规范起作用了吗?我个人认为在这个过程中开发规范的作用是比较微弱的,真正让程序员们从心底接受 DBA 的建议,规规矩矩的使用 DB,是因为他们了解了这背后的底层原理,以及如果不这样做会导致什么样的后果。
一直以来我都有一个想法,把程序员们需要的 MySQL 知识点汇总成册,不管是在公司工作,还是出去面试,这些必备的 MySQL 知识都能让你游刃有余的应对,在面试中脱颖而出,亦或是不再和 DBA 们干仗。
所以,在这个专栏里,我会以程序员在面试 MySQL 相关场景为驱动,给你讲解 MySQL 数据库的 SQL 知识、事务和锁、性能指标、性能调优等数据库相关的知识点。每个小节都会从面试官的角度对这个知识点进行深挖,让你从此不畏惧面试。
经过一段时间的思考,本专栏面向程序员朋友们日常工作中所需的 MySQL 技能树,设计了大概 3 个模块:包括 SQL 编程、事务和锁、MySQL Server。每个模块都甄选了面试时的一些高频问题做出详细深入的解答,让大家能知其然也知其所以然。具体的内容大家可以直接查看专栏目录,这里就不赘述了。在专栏的拟题阶段删除了和 DBA 相关但是与程序员无关的全部内容,不做无效的学习。
好了,不多废话,让我们一起开始本专栏的学习吧。
衷心的祝愿大家在阅读过本专栏后都能有所收获,轻松通过面试!