什么是数据库
数据的管理和存储一般都有相关的函数或者类,比如C++中就有文件流类,而既然数据的保存有文件存在了,那为什么还有数据库存在呢?
这是因为文件保存数据有以下的缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于海量数据存储
- 文件在程序控制中不方便
因此,大佬们就研究了数据库,用来对数据进行处理,更加有效的管理数据库。
当程序员对数据有各种需求时,通过mysql客户端向mysqld服务器端发送请求,mysqld会自行在磁盘中找到文件并进行相应处理,然后返回数据给mysql,十分方便。
数据库存储介质:磁盘、内存。
见一见数据库
首先我们需要登录数据库。
通过 mysql -h 127.0.0.1 -P 3306 -u root -p 登录数据库
- -h:表示数据库服务端的ip地址,mysql也是一种网络服务,不过这里我是本机测试,所以ip地址是本地环回。
- -P:表示mysqld采用的端口号,一般默认是 3306,也可以在 /etc/my.cnf 中修改
- -u:表示采用的是什么用户登录,这里是 root 用户
- -p:表示需要输入密码
登录后才能使用mysql服务。
在 /etc/my.cnf 文件中,我们能够查看到mysql的环境配置,我们可以看到,默认mysql的存储目录是在 /var/lib/mysql 中的,我们进入其中。
进入该目录下,我们查看后发现里面有各种文件,我们先不管,然后我们创建一个数据库。
create database helloworld;
然后再查看一下/var/lib/mysql 目录,我们发现,该目录下多出了一个 helloworld 目录。
这也说明了,数据库实际上就是一个目录,或者说一个文件。
然后我们在该数据库中创建一个表。
通过 use helloworld 表示我要使用 helloworld 数据库
然后再通过 create table student ( id int, name varchar(32),gender varchar(2)); 来创建一个student表。
然后我们进入helloworld 表内,发现创建了一个 student.ibd 文件。之后我们试着向表中插入数据
通过 insert into student (id,name,gender) values (1,'张三','男'); 向student表插入数据,然后通过 select * from student; 来查看插入的数据。
通过见一见数据库,我们能够了解到,实际上数据库也是一种文件。只不过我们需要通过mysql客户端来向mysqld服务端发送请求,然后服务端从磁盘上获取数据罢了。
mysql/mysqld/数据库以及表的关系
client表示mysql客户端,MySQL表示mysqld服务端,而后面的DB以及表统称数据库。
mysql架构
- mysql一共可以分为三层,最上层是mysql客户端,也就是我们在linux上用来访问数据库的工具。
- 然后就是mysql服务器端,也就是mysqld,由于mysql实际上也是一个网络服务,因此需要管理很多接口,因此服务端含有连接池,用来管理链接,或者鉴权,或者安全访问都是在这一层完成。
- 其次就是各种各样的接口,解析器和优化器,这一层的工作类似编译器,会对你的各种操作进行语法分析或者优化,然后再发送给下一层。
- 最后的存储引擎部分就是根据收到的语句进行对应的动作,比如增删查改,而不同的存储引擎针对不同的文件类型具有不同的优势,用户可以根据需求来使用引擎。
- 最底下一层就是文件系统,引擎会对文件进行各种操作,比如读取,删除,增加等。
SQL语句分类
- DDL(数据定义语言):用来维护存储数据的结构,比如create,drop,alter之类的。
- DML(数据操纵语言):用来对数据进行操作的语言,比如insert,delete,update之类的,
- DQL(数据查询语言):用来对数据进行查询的原因,比如select。
- DCL(数据控制语言):负责权限管理和事务管理,比如grant,revoke,commit。
mysql存储引擎
存储引擎是:数据库管理系统如何存储数据,如何为存储的数据建立索引和如何更新,查询数据等技术的实现方法。
mysql的核心就插件式的存储引擎,支持多种存储引擎。
可以通过 show engines; 指令查看存储引擎。
虽然引擎很多,但是实际上使用的就是 innodb 引擎,如果有特殊要求再自己选择引擎。
总结
本次我们了解了mysql实际上是一种网络服务,通过mysql客户端像mysqld发送请求,然后mysqld从数据库中获取数据,明白了数据库实际上就是一种目录,表实际上是一种文件,只不过需要通过mysql登录访问并结合mysqld的引擎才能访问,也了解了mysql的架构,sql的语句分类和存储引擎是什么。