目录
什么是数据库
站在服务器角度理解
站在用户角度理解
为什么不直接使用文件存储呢?
主流数据库
MySQL的基本使用
数据库的使用样例
服务器管理
服务器数据库表之间的关系
MySQL的架构
MySQL语句分类
存储引擎
查看存储引擎
存储引擎对比
什么是数据库
站在服务器角度理解
mysql它是数据库服务的客户端
mysqld它是数据库服务的服务器端
mysql本质:基于CS模式的一种网络服务
他是基于TCP协议,端口号是3306
站在用户角度理解
mysql是一套给我提供数据存储的网络程序
数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据--将来在磁盘上存储的一套数据库方案
数据库服务一般只的是mysqld
为什么不直接使用文件存储呢?
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理能力(用户角度)
也就是说数据的提取分析过程,是需要程序员去自己解决的,文件提供的就只是基本的读写能力,未来对内容的增删改查都需要程序员去自己查看,这是非常麻烦的事情
数据库的本质:对数据内存存储的一套解决方案,你给我字段或者要求(mysql客户端下发的),我(mysqld)直接给您结果!
它允许我们以结构化的方式存储、查询和管理数据。对外提供的是一套存储解决方案
下面我举个例子
假设你需要存储和管理一个电子商务网站的产品信息:
你的要求:我需要查看所有价格在100-200元之间的电子产品。
数据库响应:
产品ID | 产品名称 | 分类 | 价格 | 库存
-------------------------------------------------
101 | 蓝牙耳机 | 电子 | 159 | 45
103 | 智能手环 | 电子 | 199 | 23
107 | 便携充电宝 | 电子 | 129 | 78
这里数据库接收到你的查询条件(价格区间和产品类别),然后从可能包含数千种产品的完整数据集中仅返回符合条件的结果。
数据库的本质优势在于:
- 高效查询:无需遍历所有数据,通过索引快速定位符合条件的数据
- 数据一致性:确保数据符合预定义的规则和关系
- 并发处理:允许多个用户同时访问和修改数据
- 事务处理:保证复杂操作的完整性和一致性
- 数据安全:提供权限控制和数据加密
数据库存储介质
- 磁盘
- 内存
MySQL的整体结构
程序员并不需要去手动修改数据库的文件,而是将请求通过mysql交给mysqld,具体要怎么存储,格式是什么,任何细节我们都不需要去关心,由他帮助我们去数据库文件做!
主流数据库
SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑(银行),并发一般来说不如MySQL。
MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。(生态比较好,主流数据库)
PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设 计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可 能只需要几百K的内存就够了。
H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
MySQL的基本使用
数据库的使用样例
这个数据库实际上就是一个目录,被保存在Linux下的 /var/lib/mysql (可在配置文件里修改)
创建数据库
create database hello;
继续查看Linux下的MySQL文件, 我们会发现多了helloworld/的目录
使用数据库
use helloworld;
创建数据库表
create table student(
-> id int,
-> name varchar(32),
-> gender varchar(2)
-> );
数据库文件里多了两个文件 student.ibd student.frm
这里其实是有个 student.rfm 文件,但是因为我都mysql是高版本,移除了这个.rfm文件
在MySQL 8.0及更高版本中,表的元数据存储方式发生了改变:
- 旧版本MySQL (5.7及以前) 使用以下文件格式:
.frm
文件:存储表结构/元数据.MYD
文件:MyISAM表的数据文件.MYI
文件:MyISAM表的索引文件.ibd
文件:InnoDB表的数据和索引文件
- MySQL 8.0及更高版本:
- 移除了
.frm
文件 - 表元数据现在存储在MySQL内部的数据字典中
- 对于InnoDB引擎(默认引擎),只使用
.ibd
文件,其中包含表的数据、索引和元数据
- 移除了
表中插入数据
insert into student(id,name,gender) values(1,'张三','男');
查询表中数据
select *from student;
数据库的逻辑存储结构:
使用mysql建立一个数据库,建立一张表结构,插入一些数据--对比一下mysql在Linux中是如何表现的
- 建立数据库,本质上就是Linux下的一个目录
- 在数据库内建立表,本质上就是在Linux下创建对应的文件即可!
- 数据库本质其实也是文件!!只不过这些文件并不是由程序员直接操作,而是程序员通过mysql向数据库服务mysqld发送请求,然后由mysqld帮我们进行操作!!!
服务器管理
若windows也安装了mysql
执行 win+r 输入 services.msc 打开服务管理器
通过下图左侧停止,暂停,重启动按钮进行服务管理
服务器数据库表之间的关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库, 一般开发人员会针对每一个应用创建一个数据库。
MySQL的架构
MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac和Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
第一层:连接池:把链接做好管理,并且也要有权限认证(判断你是否是一个合法用户),还有一些安全方面的策略
第二层(有点像编译器):对下达的mysql指令进行语法分析、词法分析,甚至还需要对查询的语句进行一定的优化。然后按照mysql的协议下达给下一层
第三层(有点像驱动,负责和OS打交道):不同种类存储引擎(因为数据有不同的种类,有文本型的、二进制型的、大文件类型…… 针对不同种类的数据采用不同的存储方案,表现出来的效率是有区别的),对优化后的语句进行解释,然后交给下一层的文件系统完成相关的操作
前三层都属于用户层!!站在网络的视角则是属于应用层!
mysql其实也是个文件系统,只不过它是处于操作系统提供的文件之上的一套存储解决方案,
MySQL语句分类
- DDL【data definition language】 数据定义语言,用来维护存储数据的结构 代表指令: create(创建表), drop(丢弃表), alter(修改表结构)
- DML【data manipulation language】 数据操纵语言,用来对数据进行操作 代表指令: insert(插入),delete(删除),update(更新) DML中又单独分了一个DQL,数据查询语言,代表指令: select(查询)
- DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务 代表指令: grant(赋权),revoke(取消权限),commit
存储引擎
存储引擎是:数据库管理系统如何存储数据,如何为存储的数据建立索引,如何更新、查询数据等技术的实现方法
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
查看存储引擎
show engines;
存储引擎对比
其实最常用的是innoDB和MyISAM