怎么学习数据库?要不要学的太细?
之前带过一个徒弟,当时的约定是先指导他学习一个月的sql。想不到,才学习了几天,再也联系不上了,消息一直不回,好似人间蒸发一般,万般无奈之下,我只得放弃了。
若干个月之后,我又尝试地联系了一次,他终于现身了,不过也没有解释多次联系不上的原因,只是开门见山的说:感觉数据库学的太细了。潜台词无非是说不想继续学下去了。想学一些高深的东西,例如消息队列,Dubbo,Netty等。
对此情况,我感觉很多人对数据库的学习不够重视。其实我之前也是如此,总认为sql很简单,不就是select、update等简单的操作嘛,直到有一次我被人问倒。
我之前的sql学的并不好,曾经被人问倒了。问题是这样的:B树和B+树的区别是什么?现在回头来看,我能回答的很好,但是当时我却一头雾水。
被人问倒的感觉很不爽啊。所以,后来我就刻意多学习sql,慢慢就入门了。最终我发现,数据库知识是编程技术中非常重要的一个技能,因为数据库知识(sql知识)与数据结构是融入一体的。
之前读书的时候,学数据结构,学数据库,这是两个独立的科目,这种认识太肤浅了,而工作多年之后,我的体会是:数据库是数据结构的应用场景,学习数据库是数据结构的学以致用。
人的认知过程都是由浅入深的,刚开始看到的只是简单是sql语法,然后慢慢看出背后的数据结构本质。立足于大局观来看,sql的知识还是挺多的,我个人估计至少得学50~100个知识点才是入门了,例如这样的知识点:
(1)case when用法、if用法
(2)group_concat()函数
(3)一级索引,二级索引
(4)时区、世界时等
(5)表锁,行锁
(6)B树,B+树,
(7)悲观锁,乐观锁
(8)分库分表,一致性哈希
(9)redis与sql数据库的数据一致性
……
毕竟我们不是dba或者开源维护者,所以对数据库和sql的学习不必细化到源码层面,但是也不能走马观花的把sql匆匆的看一遍就认为学会了。sql是现象,背后的本质是数据结构。数据结构是干啥的?是为了规范数据的组织和存储。数据库是干啥的?是存储数据的系统。这两者就是现象和本质的关系。
最后,我想说的是,学习一定要有一颗平和的心态。心态非常重要的。这个徒弟在纠结数据库要不要学的那么细,其实根本的原因在在于内心的焦急。正如他所言,“我想半年左右快速提升”。听他这么一说,我感觉有点上火。毕竟人家来付费学习,不是花钱找骂的,所以我得耐心的纠正。我一直觉得,天下没有捷径,也没有快速的技巧,只有一步一步的走才是最科学的。像他这种情况,好几个月都不学,推着赶着都不学,突然现身了,还想着快点提升。这种想法,真是有点滑稽,这种情况,最好的方式是狠狠地骂两句,能一下子惊醒人,反而学习效果更好。但是,传道受业解惑的基本原则是耐心,所以我只能采用更平和和耐心的劝慰,但是我猜想这样的效果其实并不好,重病的下猛药,但也只能吃点没有刺激性的中草药,毕竟人家不是花钱找骂的。