数据库基础
数据库定义
我们可以在书上看到数据库的定义是
数据库是按照数据结构来组织、存储和管理数据的仓库
也就是说它其实是一个存储数据的软件
我们之前的博客写过一些项目 其中的一些项目也需要保存数据 比如 通讯录的文件版本 当时我们储存数据的方式主要是通过文件操作 当时也很顺利的完成了项目的功能 那么为什么我们不直接使用文件来保存数据 而是设计出了数据库呢
相对于数据库保存数据来说 文件保存数据存在着以下的缺点
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量文件数据
- 文件在程序中控制不方便
数据库再理解
为了加深大家对于数据库的理解 下面我们分别从软件和文件两个角度来介绍下数据库
软件角度
一开始我们通过自己写的一些程序调用一些库函数(open write等)来直接进行文件操作 将数据保存到磁盘中
当我们要对于文件中的一些数据进行增删改查的时候需要自己去敲一些代码来实现这个功能 虽然这是可以实现的 但是会很麻烦 而且如果所有的软件都要自己实现这些功能的话就不可避免的出现很多重复冗余的代码
这个时候数据库的作用之一就体现出来了 它能让用户or用户程序更方便的进行数据管理
用户通过SQL语句来对数据库下达指令 然后数据库再分析这些SQL语句的含义再进行对应的文件操作
其中数据库就是在用户程序和磁盘文件中的一个软件 它是需要自己的访问磁盘中的文件的
- 数据库也是用文件的方式来进行文件保存的
- 数据库中直接和文件打交道的部分 我们一般叫做存储引擎
如何理解存储引擎
我们可以将存储引擎类比为搜索引擎来理解
本来用户程序想要搜索磁盘中的某一个数据的时候需要自己一个个的去查找
但是有了搜索引擎之后用户程序只需要将自己想要搜索的内容告诉它 搜索引擎就会给用户程序相应的反馈
存储引擎同理
文件角度
数据库其实就是一个网络服务器 它的组成可以分为下面三段
- 数据库服务器
- 数据库客户端
- 数据库库+数据库表结构
假设在这样的一个学校中 老师是通过一个教务系统来管理学生的各种数据的
我们就可以将数据库的组成类比到图中
也就是说mysql其实是这样子的一个网络服务器结构
在学习网络部分的时候我们也见过这种结构 这其实就是一个CS模式的客户端服务器
CS模式
- C client 客户端
- S sever 服务器
在有了上面的知识之后我们再去回答下面的问题
如何理解安装mysql
安装mysql服务器的本质就是安装mysql的客户端和服务器
如何理解启动mysql
启动mysql本质就是启动mysqld服务器
如何理解连接mysql
连接mysql的时候我们也许会输入这样子的一串代码
mysql 127.0.0.1 3306
它的意思就是让mysql连接127.0.0.1ip(本地环回)的3306端口
当然mysql作为一个网络服务器也是可以进行跨网络通信的
总结
在经历上面两层角度对于数据库的理解之后我们可以做出下面的定义
**数据库是一款服务器软件 它的作用是帮我们维护数据 我们可以通过客户端向服务端发送SQL请求 之后服务端进行响应对于数据进行增删改查 **
网络角度: mysql在网络角度中属于哪一层的软件呢?
应用层
系统角度: mysql属于OS内置的软件还是需要下载的呢?
需要下载
主流数据库
- SQL Sever: 微软的产品 Net程序员的最爱 中大型项目
- Oracle: 甲骨文产品 适合大型项目 复杂的业务逻辑 并发一般来说不如MySQL
- MySQL:世界上最受欢迎的数据库 属于甲骨文 并发性好 不适合做复杂的业务 主要用在电商 SNS 论坛 对简单的SQL处理效果好
- PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库 不管是私用 商用 还是学术研究使用 可以免费使用 修改和分发
- SQLite: 是一款轻型的数据库 是遵守ACID的关系型数据库管理系统 它包含在一个相对小的C库
中 它的设计目标是嵌入式的 而且目前已经在很多嵌入式产品中使用了它 它占用资源非常的低 在嵌入式设备中 可能只需要几百K的内存就够了 - H2: 是一个用Java开发的嵌入式数据库 它本身只是一个类库 可以直接嵌入到应用项目中
这其中我们使用的最多就是Mysql和Oracle