一、什么是数据库
显然,从名字上来看,数据库是一个存储数据的库。
总所周知,文件也能存储数据
1、为什么需要数据库?
那么为什么有了文件还需要数据库呢?
a、文件虽然有存储数据的能力,但是文件缺乏高效管理数据的能力。
想要管理数据,还需要程序员进行文件操作(相信大家都不喜欢进行文件操作,太麻烦了QAQ)
b、文件缺乏安全性。
文件很容易被其他人看到,所以里面的数据是非常的不安全的,很容易被窃取,而数据库的连接池会进行身份校验、安全保障,数据库的安全性比文件更好
c、文件的存储能力没有数据库大
这是显而易见的,一个文件顶天了也就几个G,但是数据库可以存更多的数据
面对文件的这些不足之处,数据库就应运而生了。
2、从广义和狭义上分别理解数据库
所以,根据数据库的由来,我们可以知道,从广义上来看数据库是对磁盘或内存上数据进行特定结构组织存储和高效管理的一套解决方案。
那么微观呢?
我们在下载mysql的时候,我们下载的并不仅仅只有mysql,可以看到,我们下载的其实还有一个mysqld。
这个mysqld又是啥呢?
其实啊,mysqld是mysql数据库的服务端,而mysql是数据库的客户端。
所以呢
mysql其实是一套提供数据存取和管理的CS服务程序
那mysql是客户端,mysqld是服务端,那我数据存哪里呢?
数据当然要存数据库了
所以,mysql和mysqld准确来说都不是数据库
真正的数据库本质上还是文件,只不过是遵循了某种特定组织结构的文件
狭义上的数据库其实就是这些遵循某种特定组织结构进行存储和管理数据的文件。
3、SQL语句的执行过程
程序员在mysql中输入SQL语句后,会发送到服务器上,mysqld服务端就会进行响应,按照对应的指令对磁盘上的数据库文件进行对应的操作,之后在返回操作结果。
所以mysql是不需要程序员进行繁琐的文件操作就可以高效的管理数据。
二、数据库操作与Linux之间的关系
我们知道Linux下一切皆文件,所以数据库操作肯定跟Linux中的文件相对应上。
首先,我们要明确mysql对应的文件一般是在/var/lib/mysql
进入这个目录
然后进行数据库操作,观察该目录的变化。
新建和删除数据库
首先新建数据库
create database user;
我们可以发现当我们创建数据库user时,会在mysql的目录下新建一个新的目录user
打开user,user中只存在一个配置文件,里面包含编码集和校验集的信息
所以创建数据库的本质其实就是在mysql目录下新建一个目录文件。
这个目录文件只允许这个目录的拥有者rwx,所属组rx,other没有任何权限。
新建和删除表
首先进入user数据库,再新建表
use user;
create table person(
-> id int,
-> name varchar(32) comment “姓名”,
-> birthday date comment “日期”
-> );
新建表person后,会发现在user这个目录文件下,处理配置文件之外,又新多了两文件
person.frm 存储表的结构信息
person.ibd 存储数据和索引
有的存储引擎会将数据和索引分开存储,就会新建三个文件
所以在数据库里创建表本质上就是在对应的数据库目录下新建新的文件
三、数据库的架构
在逻辑上数据库的存储结构是行列结构
数据库的体系结构可以看下面这张图
数据库的体系主要分为三层
第一层是连接池,这一层的作用是负责建立连接,并且进行身份校验和安全保护
第二层的作用对SQL语句进行句法分析,并且优化你的SQL语句,并且将你的SQL语句全部都记录下来。
第三层是数据库的核心层,这一层是存储引擎层,负责真正去操作数据库,实现数据库的各种操作,像插入,删除,查表,更新,建立索引等都由存储引擎去实现。
再往深处去就到文件系统的层面了
四、SQL语句的分类
SQL语句一般分为三类,分别是DDL,DML,DCL
1、DDL
DDL的全称是data definition language,也就是数据定义语言,该类语句的作用是去对数据库的结构进行操作,代表的语句有create,drop,alter等
2、DML
DML的全称是data manipulation language,也就是数据操纵语言,该类语句的作用是对数据库中的数据进行操纵,代表语句有insert,delete,update等
其中DML语句有一个小的分支使DQL,数据查询语言,代表语句有select
3、DCL、
DCL的全称是data control language,也就是数据控制语言,该类语句的作用是对权限和事务进行管理,代表语句有remoke,commit,grant等