数据库原理要学编程吗(为什么你精通CRUD,却搞不懂数据库的基本原理?)

为什么你知晓CRUD,却搞不懂数据库的基本原理?

作者:黄小斜

泉源:
https://juejin.im/post/5e5528b7e51d4526ce61451d

本文头脑导图

?数据库和干系型数据库

作为一个步骤员,不了解数据库怎样能行,那么数据库毕竟是个啥呢,作为一个Java工程师,平常和数据库打交道着实不少,所谓的CRUD但是就是对数据库举行增编削查的利用。

依据百度百科的先容,数据库是“依照数据布局来构造、存储和办理数据的货仓”。是一个长时存储在盘算机内的、有构造的、有共享的、一致办理的数据聚集。

数据库是以一定办法储存在一同、能与多个用户共享、具有尽约莫小的冗余度、与使用步骤互相独立的数据聚集,可视为电子化的文件柜——存储电子文件的地方,用户可以对文件中的数据举行新增、查询、更新、删除等利用。

是不是没听懂,好吧,简便来说,像MySQL如此的数据库,就是用于存储布局化数据的,好比一个学生的信息数据,一个商品的数据,大概是一个学生置办商品的消耗数据。

遐想到平常我们常常使用的Excel,但是和数据库挺像的,数据库但是就是一个表格,内里有很多的数据典范,好比字符串,好比数字,再好比长文本等等。

而这类数据库也叫干系型数据库,典范代表就是MySQL。

再看看百度百科的先容,干系型数据库,是指接纳了干系模子来构造数据的数据库,其以行和列的情势存储数据,以便于用户了解,干系型数据库这一系列的行和列被称为表,一组表构成了数据库。用户经过查询来检索数据库中的数据,而查询是一个用于限定命据库中某些地区的实行代码。干系模子可以简便了解为二维表格模子,而一个干系型数据库就是由二维表及其之间的干系构成的一个数据构造。

除了干系型数据库之外,近些年来另有很多nosql(not only sql)数据库在崛起,好比MongoDB,以及图数据库、列式数据库等等,这些数据库关于熟手步骤员来说用的并不多,以是本文我们只讨论关于干系型数据库的内容。

干系型数据库是我们步骤员平常用的最多,也最简便易上手的数据库典范,以是,学习数据库寻常也从MySQL这类干系型数据库动手,一来它简便勤学,二来它是无偿的。

我的数据库学习历程

我第一次听说“数据库”这个词照旧在大学的时分,当时分正值各位找事情,有一个同砚和我们分享本人的求职履历,据他所说,每个公司都市察看你的数据库知识,学好了数据库,口试什么公司都不怕。

事先我还以为挺玄乎的,不外我们学校的确没来什么大公司,我对此半信半疑,至于毕竟是不是如此,厥后也就没再追查了。

第二次交往数据库,是在学习Java的时分,记得起先本人随着一个小教程,下载安装了MySQL,然后从网上下载了demo代码,用事先优秀的开发东西eclipse跑通了他人家的代码,但是就是增编削查。

只不外事先对这些东西也没啥看法,厥后又下载了一个db的可视化东西,可以更便利地域解本人的数据库里毕竟都有啥。

再到厥后,我开头徐徐交往项目实战,使用数据库的时间也越来越长,自以为关于数据库的了解还算可以,直到我真正地交往了数据库干系的口试题,才让我发觉本人关于数据库的了解是何等的浅薄。

谁人时分,我只懂写一些简便的crud,乃至连表里毗连、group by和count等一些简便的sql用法都不了解,除此之外,我关于数据库的一些原感性内容几乎也是一无所知的,好比数据库的索引、事件、锁机制,我统统不晓得,更别谈怎样回复干系的口试题了。

于是,我开头熟悉到学习数据库原理是何等紧张的一件事变,我开头看数据库方面的册本,从最基本的数据库讲义,再到MySQL的原感性内容,再到mybatis这类orm框架的完成,我都渐渐地开头学习和了解,直到我可以对大局部的数据库口试题都较好地把握。

而如今,我在一个天天要处理海量数据的公司里事情,关于数据方面的学习以前不仅仅停留在数据库了,我还要交往数据货仓、分布式数据库以及种种大数据的使用场景,学习数据知识的路途看来短时间内是走不完了。

学习数据库,先从SQL动手

说到MySQL,就不得不谈谈SQL了,sql,依照百科的说法是如此的

布局化查询言语(Structured Query Language)简称SQL,是一种特别目标的编程言语,是一种数据库查询和步骤计划言语,用于存取数据以及查询、更新和办理干系数据库体系。

关于不同的数据库,sql的写法约莫有一些差别,但是大抵都是相反的,就拿MySQL来说,平常我们用到最多的就是select、update、delete和insert了,这类利用统称为数据利用言语DML(Data Manipulation Language),用户经过它可以完成对数据库的基本利用。

固然另有利用数据库和表的一些ddl,数据库形式界说言语DDL(Data Definition Language),是用于形貌数据库中要存储的实际天下实体的言语。 简便来说,ddl但是就是用来实行建表,删表,变动表布局等利用的

从前我的sql写的并不多,毕竟简便的增编削查并不必要多繁复的sql本事,最多就是做一下表毗连。

再到厥后,我开头做一些项目,交往了ORM的一些框架,好比hibernate和mybatis,这些框架乃至可以让你完全不写sql,只需调用一些增编削查的API即可,这让我很长一段时间都忽略了SQL的紧张性。

但是学习sql最繁复的场合并不是一些高等用法,而是在于实践场景中的使用和优化。两条sql,约莫由于简便的差别就会有很大的功能差距,差别点约莫是,好比有没有走到索引,对否是全表扫描,又大概走到了哪个索引,而如此的功能分析仅有在实践的场景里才故意义。

固然了,关于熟手来说,学习sql的语法是放在第一位的,然后才干渐渐过渡到会使用,会优化,会分析。

关于数据库的那些口试题

想要真正学好数据库,搞定口试题中的干系成绩,那你就必必要搞懂数据库的基本原理。

假如你不信赖,那我任意举几个口试题稀有的题型,好比”数据库事件的ACID是什么意思”、“数据库中有哪些锁”、“数据库的索引用的是什么数据布局”

外表几道题算是浅易版的,在寻常的口试中也常常可以看到,就算你只是背一背答案,约莫也几多能答对一些,那么假如再进一步,察看一下数据库的原感性知识,恐怕就没这么简便了。

举个栗子“数据库事件的ACID是怎样完成的”,“数据库中有哪些锁,分散是怎样完成的,怎样使用”、“数据库中的索引是怎样完成的,何时掷中索引,何时不克不及,为什么“

是不是以为难度一下子就上去了。毕竟深化到原感性的东西,懂的人就越来越少了。除此之外,另有很多进阶的口试题,更多时分会团结实践场景来察看。

好比察看你对MySQL存储引擎innodb的了解,关于sql优化的了解 ,以及关于分布式场景下数据库才能的使用,好比分布式锁,分布式事件,以及分库分表的一些成绩。

晓得了口试题约莫都考啥之后,接下去我们要做的就是找到症结地点,然后逐一击破

数据库基本原理

学习数据库,你必要先打好基本,数据库原理是盘算机科班的一门必修课,非科班的我选择的是自学,我事先也是拿着那本大学讲义《数据库体系概论》来自学的。

讲义这种东西,一定照旧偏实际的一点,我们要了解的内容主要包含几个方面

1、数据库模子有哪些:包含条理模子、网状模子和干系模子,我们所用的干系型数据库就是基于干系模子完成的。

2、干系数据库的基本和sql:了解干系数据库的基本看法,了解sql的基本使用办法,最少CRUD和一些稀有用法要搞懂

3、数据库的宁静性和完备性,这两部老实容但是实际的东西比力单调,实践上对应到实践场景中,宁静性就是要保护数据的宁静,包含权限控制和数据备份,而完备性则是经过一些商定和标准来限定数据库的存储内容,好比我们可以用主键、唯一键、非空等要求来限定字段的取值。

4、干系数据实际 这部老实容很故意思,也比力繁复,讲到了数据库的范式实际,从一范式到四范式,各有各的用法和要求,某互联网公司“第四范式”就是用这个看法来定名的。

5、事件和锁 最初一部老实容,就是数据库的两个紧张构成局部,事件和锁,事件可以确保一组数据库利用的ACID特性,十分实用于必要数据一律性的场景,而数据库的锁不仅是完成事件的基本,还可以机动地实用于不同的数据库使用场景,我们还可以经过sql语句来完成加锁和开释,关于并发场景尤其管用。

MySQL的完成原理

学习完了数据库基本之后,接下去就该学习MySQL了,毕竟很多时分我们的数据库使用就是MySQL。

但是MySQL里的很多知识点和我们外表提到的数据库基本双管齐下,而回到MySQL的完成层,我们就得来看看MySQL的存储引擎了。

MySQL的存储引擎分为innodb和myisam,信赖各位关于这两个引擎区别的口试题看了也不少,好比innodb支持事件,支持行级锁,而myisam不支持。

由于如今innodb基本上是主流,以是我们讨论MySQL的时分基本上就是在讨论innodb。关于MySQL的完成原理,我以为约莫有这么一些内容必要我们去学习。

起首,我们了解MySQL里有哪些数据典范,寻常的用法怎样,然后,实验用MySQL去跑一些sql语句,建库建表,加索引加主键,总之,这些实践能协助你更好地学习上述内容。

想要更好地域解MySQL的原理,我们就必必要了解MySQL的全体架构,寻常来说,MySQL从上到下可以分为这么几层

?客户端

也就是我们常常用的可视化东西,好比Navicat for MySQL

办事端

就是我们安装的MySQL步骤,但是掀开它它就是一个MySQL的办事端历程

sql实行层

sql实行层主要卖力剖析实行sql,内里包含了很多繁复的构成局部,好比表明器,分析器,优化器等等,实行层会天生一个sql的实行方案,这个方案也常常是我们分析sql功能的一个紧张参考内容

存储引擎层

存储引擎层是innodb了,好比数据要如构造和存放,索引要怎样创建和办理等等,加锁怎样加,事件怎样完成,都是这一层要思索的内容。

文件体系层

存储引擎的下一层就是文件体系了,数据库的数据怎样和文件体系举行交互,就是这一层要做的事变了。

索引

不得不说,索引相对是数据库中最常常察看,考点也最多的内容了。

好比给你一条sql,那么它可否掷中索引,能掷中哪些索引,假如想要掷中某个索引,你应该怎样修正,这种成绩口试时是不是常常看到,变来变去这么多题型,但是口试官就是想察看你关于索引的了解。

另有就是,索引的数据布局,一样好坏常抢手的考点之一,索引但是是基于B 树来完成的,不晓得b 树是啥,请回去看数据布局。

简便来说,它是一种多路搜刮树,努力于更短的时间来完成数据检索,由于它的高度比二叉树要低,而比起平凡的b树,它的非叶节点只起索引作用,而叶子节点是排序串联的,以好坏常合适做搜刮树。

假如你了解了这一点,那么面临此类口试题就可以愈加冷静一些,口试官但是就是想晓得你对b 树的了解到了什么样的水平罢了。

事件和锁

除了索引之外,数据库中最繁复的内容约莫就是事件和锁了。

就拿事件的ACID特性来说,你必要了解每个大写字母眼前的完成原理,好比原子性是怎样完成的,一律性是怎样确保的,眼前的原理是什么。

我们平常常用的事件约莫就是spring里的事件模板,在事件里实行的同库数据库利用,要么都告捷,要么都失败,这就是原子性。

两个事件之间互不影响,这就是断绝性,固然了,这里又触及到了事件断绝级别。

事件断绝级别包含读未提交,读已提交,可反复读和序列化,每个事件断绝级别都实用于某种数据库读写场景,很多时分,我们都必要搞懂断绝级别眼前的原理,才干更好地实用它。

MySQL里默许使用可反复读的断绝级别,这个级别基本上可以确保我们的事件依照预期实行,在MySQL中,这个事件断绝级别乃至可以处理幻读的成绩。

在MySQL的事件眼前,但是有一个隐蔽的boss,那就是数据库的锁,很多事件的断绝级别都是经过锁来完成的,好比可反复读只需加行锁就可以完成了,而幻读则必要加上间隙锁next-key lock来完成。

行级锁和表级锁是MySQL中的两种锁,表级锁望文生义,会直接锁表,一次仅有一个事件可以拜候,而行级锁但是锁的也并非是一行,在MySQL中,这个锁加在索引上,而这个索引对应的数据屡屡不止一行,以是这个行级锁只是实际意义上的"行级锁"

说了这么多,要了解MySQL的事件和锁,照旧要多看看干系的册本和文章,了解其内里的完成原理,知其然也要知其以是然。

底下又到了我们熟习的资源保举环节

保举资源

册本

数据库

0 《数据库体系概论》

数据库原理应该是讲义吧,这本书作为数据库入门来说照旧可以的,毕竟不是专门做DB的,看大厚书用处不大,这本书把数据库的基本看法都讲完了。

1 sql必知必会

?

?这本书主要是解说sql语句怎样写,毕竟数据库最紧张的一点就是要熟稔地使用sql语句,固然这本书也可以当干活具书来使用。

2 深化浅出MySQL

?

?这本书适互助为MySQL的学习册本,当你有了一定的MySQL使用履历后,可以看看它,该书从数据库的基本、开发、优化、办理维护和架构5个方面临MySQL举行了具体的先容,讲的不算特别深,但是充足我们使用了。这本书我也只看了一局部。

3 MySQL武艺内幕:innodb存储引擎

?

看完外表那本书今后,对MySQL算是比力熟习了,不外关于口试中常考的innodb引擎,照旧保举一下这本书把,专门解说了innodb存储引擎的干系内容。我还没有细看,但是内容充足你学好innodb了。

4 高功能Mysql

??

这本书可以说是很厚了,更合适DBA拜读,讲的太具体了,打扰了。 假如必要获取到这些册本的PDF版本,眷注转发本文章后私信【文档】即可无偿获取到

数据库原理要学编程吗(为什么你精通CRUD,却搞不懂数据库的基本原理?)(图1)

GM游戏 更多