在这里插入图片描述
专栏链接:【点击转跳】

1. 什么是数据库

存储数据用文件就可以了,为什么还要弄个数据库?

文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据内容的查询和管理能力
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。


我们安装的mysql,是mysql数据库的客户端:
请添加图片描述
而mysqld( d则是daemon,表示守护进程和sshd类似 ) 就是mysql的服务器端:
在这里插入图片描述
所以我们的mysql本质是一种网络服务;是一种基于TCP协议的CS(客户服务端)模式的一种网络服务;是一套给我们提供数据存取服务的网络程序。
在这里插入图片描述

⚠️:在口语中,我们有个数据库的叫法,一般指的是:在磁盘或者内存中存储的特定结构组织的数据 —— 将来在磁盘上存储的一套数据库方案。

所以综上,数据库的本质:就是对数据内容存储的一套解决方案,你给我字段或者要求,数据库则负责处理好给结果!

2. 基本使用

2.1 连接服务器

这条命令用于连接 MySQL 数据库:

mysql -h 127.0.0.1 -P 3306 -u root -p
  • mysql:启动 MySQL 命令行客户端。
  • -h 127.0.0.1:指定数据库服务器地址。127.0.0.1 表示本机。
  • -P 3306:指定服务器端口,MySQL 默认端口通常是 3306。这里的 P 是大写。
  • -u root:指明登录的具体用户,这里是使用 root 用户登录( MySQL 里的超级管理员账号,数据库最高权限用户 )。
  • -p:指明你需要输入该用户的密码(密码不会显示在屏幕上),没有设置密码该选项可以忽略。

连接成功后会进入 MySQL 提示符,通常是 mysql>,之后就可以输入 SQL 语句,例如 SHOW DATABASES; 查看数据库列表。
请添加图片描述
⚠️:如果没有写 -h 127.0.0.1 默认是连接本地,如果没有写 -P 3306 默认是连接3306端口号


直接输入quit就能退出
请添加图片描述

2.2 服务器,数据库,表关系

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
  • 数据库服务器、数据库和表的关系如下:
    在这里插入图片描述

2.3 使用案例

  1. 创建数据库:
create database 库的名字;

我这里创建一个hellowrold的数据库
请添加图片描述
此时在/var/lib/mysql路径下我们发现多了个目录:
在这里插入图片描述
而且是目录的形式:
在这里插入图片描述

所以创建一个数据库,本质就是Linux下的一个目录


  1. 选择(或者使用)特定数据库:
use helloworld;

请添加图片描述


  1. 创建数据库表
create table student(
id int,
name varchar(32),
gender varchar(2)
);

此时我们就将这个表建立好了
请添加图片描述
此时我们发现在/var/lib/mysql/helloworld路径下面多了个文件:
在这里插入图片描述
所以在数据库内建表,本质就是在Linux下创建对应的文件。


  1. 表中插入数据:
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');

请添加图片描述


  1. 查询表中数据:
select * from student;

请添加图片描述


问题:所以这些工作是谁做的?

答:mysqld服务帮我们做的,其实数据库本质也是文件!!只不过这些文件并不由程序员直接操作,而是由数据库帮助我们操作。

在这里插入图片描述

2.4 数据逻辑存储

请添加图片描述

3. MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

在这里插入图片描述

mysql客户端没什么好说的,服务端分三层:

  • 第一层 链接池(Connection Pool): 当有链接访问服务端时,用来对链接进行管理和认证,保证数据的安全。
  • 第二层 类似编译器: 对sql语句进行分析,转化成第三层看得懂的指令
  • 第三层 存储引擎: 有不同种类的存储引擎(因为数据的类型不同,所采用的存储方案不同,针对不同场景可以选择使用不同引擎),上层下达指令后,对指令进行解释,然后去访问指定数据库和表结构,对数据进行增删查改(其实上三层本质都属于用户层)
  • 图片上的第四层,则是mysql依赖的最底层的文件系统(linux的是ext4),然后mysql通过该系统将数据以二进制的方式存储到特定的目录下!( 属于系统层 )

所以Mysql依然是一个文件系统,不过是基于OS文件系统之上的一套存储解决方案。

5. SQL语句分类

  • DDL【data definition language】数据定义语言,用来维护存储数据的结构
    代表指令: create, drop, alter
  • DML【data manipulation language】数据操纵语言,用来对数据进行操作
    代表指令: insert, delete, update
    • DML中又单独分了一个DQL,数据查询语言,代表指令: select
  • DCL【Data Control Language】数据控制语言,主要负责权限管理和事务
    代表指令: grant, revoke, commit

6. 存储引擎

6.1 存储引擎定义

存储引擎是: 数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的具体实现方法,说人话就是,在mysql中真正具体做事情的。

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

6.2 查看存储引擎

show engines;

请添加图片描述

6.3 存储引擎对比

在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐