MySQL系统篇,数据库基础(二):数据库概念、SQL 分类与存储引擎


文章目录
  • 系列文章目录
  • 前言
  • 一、什么是数据库
    • [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 分几类、数据存在哪。这些概念会在后面的每一节里反复用到。

  感谢您的阅读,我们下次再见。


相关推荐
FluxDB1 小时前
《用 Rust + GPUI 做了一个开源数据库客户端:FluxDB》
数据库
roman_日积跬步-终至千里1 小时前
【数据Agent论文·查询与语义|09】Spider 2.0:从生成SQL走向完成企业工作流
数据库·sql·数据分析
泡海椒1 小时前
JQuick-SQL AST 解析:从 SQL 文本到强类型节点
数据库·sql
要开心吖ZSH1 小时前
SeaTunnel + Doris + MySQL-CDC 数据同步故障排查个人笔记
数据库·mysql·doris·seatunnel·mysql cdc
泡海椒1 小时前
JQuick-SQL 模块架构:从 SQL AST 到分布式执行
分布式·sql·架构
data analyse 4561 小时前
Session数怎么计算?明确会话切分、超时与跨页规则
java·服务器·数据库
骑着蜗牛撵大象3271 小时前
ToolJet + PostgreSQL:后台表格、查询和流程,一次搭成可远程访问的业务系统
数据库·低代码·docker·postgresql·内部工具·tooljet
先知后行。1 小时前
各种文件系统
linux·服务器·数据库