文章目录
- 系列文章目录
- 前言
- 一、什么是数据库
- [1.1 文件保存数据的四个缺点](#1.1 文件保存数据的四个缺点)
- [1.2 数据库的存储介质](#1.2 数据库的存储介质)
- 二、主流数据库有哪些
- [三、MySQL 基本使用](#三、MySQL 基本使用)
- [3.1 连接服务器](#3.1 连接服务器)
- [3.2 服务器、数据库、表的关系](#3.2 服务器、数据库、表的关系)
- [3.3 一个完整的使用案例](#3.3 一个完整的使用案例)
- 四、数据逻辑存储
- [五、MySQL 架构](#五、MySQL 架构)
- [六、SQL 分类](#六、SQL 分类)
- 七、存储引擎
- [7.1 什么是存储引擎](#7.1 什么是存储引擎)
- [7.2 查看与对比存储引擎](#7.2 查看与对比存储引擎)
- 总结
前言
大家好,我是曦夜日长。上一节我们把 MySQL 装起来了,但有个更根本的问题还没回答:存数据用文件就可以了,为什么还要弄个数据库?
今天这篇文章,我们就从这个问题出发,把数据库的概念、主流数据库、MySQL 的整体架构、SQL 的分类以及存储引擎这些"地基"一次性讲清楚。
一、什么是数据库
先回答开头那个问题:文件保存数据,到底差在哪?
1.1 文件保存数据的四个缺点
- 文件的安全性问题:文件谁都能看、都能改,没有权限和事务保护。
- 文件不利于数据查询和管理:想按条件查一条记录,得自己写代码遍历整个文件。
- 文件不利于存储海量数据:数据量一大,文件方案基本就崩了。
- 文件在程序中控制不方便:读写、并发、加锁都要程序员自己实现。
为了解决上述问题,专家们设计出更加利于管理数据的东西------数据库,它能更有效地管理数据。
数据库的水平是衡量一个程序员水平的重要指标。
1.2 数据库的存储介质
数据库的数据可以存放在两种介质上:
- 磁盘:容量大、持久保存,是数据库的主要存储介质。
- 内存:速度快,但断电即失,通常用于缓存加速。
二、主流数据库有哪些
数据库不是只有 MySQL 一家,了解一下各自定位,对选型很有帮助:
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| SQL Server | 微软产品,.Net 程序员的最爱 | 中大型项目 |
| Oracle | 甲骨文产品,复杂业务逻辑强,并发一般不如 MySQL | 大型项目 |
| MySQL | 世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂业务 | 电商、SNS、论坛,简单 SQL 处理效果好 |
| PostgreSQL | 加州大学伯克利分校计算机系开发的关系型数据库 | 私用、商用、学术研究均可,可免费使用、修改和分发 |
| SQLite | 轻型数据库,遵守 ACID 的关系型数据库管理系统,包含在一个相对小的 C 库中 | 嵌入式产品,占用资源极低,可能只需几百 K 内存 |
| H2 | 用 Java 开发的嵌入式数据库,本身只是一个类库 | 可直接嵌入到应用项目中 |
可以看出,MySQL 的最大优势是并发性好、生态成熟、简单 SQL 处理效率高,这也是它在互联网公司被广泛使用的原因。
三、MySQL 基本使用
3.1 连接服务器
安装完成后,就可以连接服务器了。输入:
bash
mysql -h 127.0.0.1 -P 3306 -u root -p
Enter password: ****
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.21-log MySQL Community Server (GPL)
...
mysql>
这里的两个参数有默认值,需要特别注意:
- 如果没有写
-h 127.0.0.1,默认是连接本地- 如果没有写
-P 3306,默认是连接 3306 端口号
连接成功后会打印版本信息,并出现 mysql> 提示符,表示已经进入 MySQL 的命令行交互环境。
3.2 服务器、数据库、表的关系
这是初学者最容易绕晕的一层关系,用一句话理清:
- 所谓安装数据库服务器 ,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库;
- 一般开发人员会针对每一个应用创建一个数据库;
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
一句话总结层级关系:数据库服务器 → 数据库 → 表 → 数据行。服务器是管理程序,数据库是应用级别的隔离单元,表是实体数据的载体。
3.3 一个完整的使用案例
光说概念太抽象,直接上手走一遍完整流程:创建数据库 → 使用数据库 → 建表 → 插入数据 → 查询数据。
第一步,创建数据库:
sql
create database helloworld;
第二步,使用(选中)数据库:
sql
use helloworld;
第三步,创建数据库表:
sql
create table student(
id int,
name varchar(32),
gender varchar(2)
);
第四步,向表中插入数据:
sql
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
第五步,查询表中的数据:
sql
select * from student;
到这里,一个最小的数据库应用就搭起来了。可以看到,整个流程就是"库 → 表 → 数据"三层的层层递进。
四、数据逻辑存储
上面案例中的三层结构,对应到 MySQL 内部就是它的数据逻辑存储模型:数据库(database)之下是表(table),表之下是行(row)与列(column)。
理解这个逻辑模型很重要,因为后面学的所有 SQL 语句------无论建库、建表还是增删改查------本质上都是在操作这个逻辑结构。物理上数据最终落到磁盘文件,但逻辑上我们看到的就是库、表、行、列。
五、MySQL 架构
MySQL 是一个可移植 的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
它的整体架构大致可以分为三层:
- 连接层 :负责客户端连接、认证、线程管理等(我们之前
mysql -uroot -p登录的就是这一层)。 - 服务层:负责 SQL 解析、优化、执行,以及内置函数、存储过程、触发器等。
- 存储引擎层 :真正负责数据的存储与提取,这一层是插件式的(下面会讲到)。
正因为存储引擎是插件式的,MySQL 才能做到"同一套 SQL 语句,底层可以换不同的引擎",这也是它灵活性的来源。
六、SQL 分类
SQL 语句按功能可以分为三大类,这个分类一定要记牢,后面学命令时会不断用到:
| 分类 | 全称 | 作用 | 代表指令 |
|---|---|---|---|
| DDL | Data Definition Language(数据定义语言) | 用来维护存储数据的结构 | create、drop、alter |
| DML | Data Manipulation Language(数据操纵语言) | 用来对数据进行操作 | insert、delete、update |
| DCL | Data Control Language(数据控制语言) | 主要负责权限管理和事务 | grant、revoke、commit |
特别提醒:DML 中又单独分出了一个 DQL (Data Query Language,数据查询语言),代表指令是
select。所以严格来说,查询语句是独立于增删改的一类。
对照上一节的案例,你会发现它们恰好覆盖了这几类:
sql
create database helloworld; -- DDL:定义结构
create table student(...); -- DDL:定义结构
insert into student ...; -- DML:操作数据
select * from student; -- DQL:查询数据
七、存储引擎
7.1 什么是存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
一句话总结:MySQL 的核心就是插件式存储引擎,支持多种存储引擎。
"插件式"意味着你可以针对不同的表选择不同的引擎------比如需要事务和外键就选 InnoDB,需要极速读、以查询为主就可以考虑 MyISAM。
7.2 查看与对比存储引擎
想看看你的 MySQL 支持哪些存储引擎、默认是哪个,一条命令就能看到:
sql
show engines;
它会列出所有可用引擎以及各自是否支持事务(Transactions)、是否支持分布式(XA)、是否支持保存点(Savepoints)等信息,直接横向对比即可。
在我们的
my.cnf配置里,已经通过default-storage-engine=innodb把默认引擎设成了 InnoDB------这也是 MySQL 5.5 之后官方推荐的默认引擎。
总结
这就是本节的全部内容了。我们从"为什么不用文件存数据"这个问题出发,梳理了数据库的概念与存储介质、主流数据库的定位、MySQL 的连接方式与"服务器-数据库-表"三层关系,并用一个完整的案例走通了建库、建表、插入、查询,最后讲解了 MySQL 的三层架构、SQL 的三大分类(DDL/DML/DCL,以及单列的 DQL)和插件式存储引擎。
到这里,"地基"就打好了------我们知道了数据库是什么、MySQL 长什么样、SQL 分几类、数据存在哪。这些概念会在后面的每一节里反复用到。
感谢您的阅读,我们下次再见。