当前位置: 首页 > ds >正文

【MySQL】数据库基础

数据库基础

  • 1. 数据库概念
  • 2. 主流数据库
  • 3. 基本使用
    • 1. 连接服务器
    • 2. 服务器管理
    • 2. 服务器,数据库,表的关系
    • 3. 数据库存储路径
    • 4. 数据库基本操作
  • 4. MySQL 架构
  • 5. SQL 语句分类
  • 6. 存储引擎

1. 数据库概念

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

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

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

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

例如:MySQL 数据库中的两个核心组件 mysql 与 mysqld,基于客户端/服务器模式的一种网络服务。mysql 作为客户端提供用户界面和查询窗口,而 mysqld 作为服务器负责处理 SQL 语句和管理数据库数据。二者协同工作,共同完成数据库的各种操作。

客户端 VS 服务器

数据库是分为数据库服务器和数据库客户端的,以 MySQL 数据库为例,我们使用 MySQL 数据库时会先通过 mysql 命令连接 MySQL 服务器。如下:

在这里插入图片描述

这里我们使用的 mysql 命令就是 MySQL 的客户端,而 MySQL 服务器以守护进程的方式一直在后台运行,可以通过 ps 命令进行查看。如下:

在这里插入图片描述

这里查看到的 mysqld 就是 MySQL 的服务器,我们使用 mysql 命令实际就是在连接 mysqld 服务。通过 netstat 命令可以看到,MySQL 服务器底层采用的是 TCP6 协议,目前服务器处于监听状态。如下:

在这里插入图片描述

也就是说,MySQL 服务器本质是一个网络服务器,我们使用 mysql 命令连接 MySQL 服务器时,本质就是 MySQL 客户端在向 MySQL 服务器发起连接请求,连接建立成功后 MySQL 客户端就会将用户输入的 SQL 语句发送给 MySQL 服务器,之后 MySQL 服务器就会根据 SQL 语句对数据进行对应的操作,然后将结果返回给 MySQL 客户端。如下图:

在这里插入图片描述

数据库的存储介质

  • 磁盘级数据库:MySQL
  • 内存级数据库:Redis

说明一下:

  • 磁盘数据库的数据主要存储在磁盘上,因此磁盘数据库在数据的持久化保存上有明显优势。但磁盘数据库为了提高数据的存储效率,也有自己对应的缓存机制,因此在某一个时刻之内,不一定所有数据都会被刷新到磁盘上。
  • 内存数据库的数据主要存储在内存中,与磁盘数据库相比,内存数据库可以大大提高读取速度,减少数据库的访问时间。但内存数据库并非完全不使用磁盘,数据库的启动信息、初始数据等还是需要存储在磁盘上的,只是数据主要在内存中进行存储和运算。
  • 由于内存数据库的数据存储在内存中,数据库主机掉电后数据就会丢失,因此在数据库服务关闭前通常需要把内存中的数据转储到磁盘上,甚至在内存数据库运行期间,一些数据也会持久化到磁盘存储。

2. 主流数据库

  • SQL Sever:微软的产品,.Net程序员的最爱,适合中大型项目。
  • Oracle:甲骨文产品,适合大型项目,复杂的业务逻辑,但并发一般来说不如 MySQL。
  • MySQL:甲骨文产品,世界上最受欢迎的数据库,属于并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2:是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

3. 基本使用

1. 连接服务器

连接 MySQL 服务器的方式如下:

在这里插入图片描述
解释说明:

  • -h: 表示你要连接的 MySQL 服务器所在的主机,127.0.0.1 表示本主机。
  • -P: 表示你要连接的 MySQL 服务器所对应的端口号,一般默认是 3306
  • -u: 表示用哪一个用户连接 MySQL 服务器,root表示超级用户。
  • -p: 表示该用户对应的密码,密码可以直接跟在 -p 后面,也可以回车后输入。

此外,如果要连接的是本地的 MySQL 服务器,那么连接时只需要指明用户名和用户密码即可。如下:

在这里插入图片描述

连接到 MySQL 服务器后,就可以输入各种 SQL 语句让服务器执行了,当要退出 mysql 时直接输入 quit 或 exit 或 \q。如下:

在这里插入图片描述

2. 服务器管理

停止服务器

通过 systemctl stop mysql 可以停止 MySQL 服务器,如下:

在这里插入图片描述

启动服务器

通过 systemctl start mysql 可以启动 MySQL 服务器,如下:

在这里插入图片描述

重启服务器

通过 systemctl restart mysql 可以重启 MySQL 服务器,如下:

在这里插入图片描述

2. 服务器,数据库,表的关系

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

数据库服务器、数据库和表的关系如下:

在这里插入图片描述

3. 数据库存储路径

通过 MySQL 创建的数据库和各种表结构,最终会以文件的形式存储下来,通过查看 MySQL 的配置文件中的 datadir 可以得知数据文件的存储路径。

比如我的 MySQL 配置文件的绝对路径为 /etc/mysql/mysql.conf.d/mysqld.cnf,配置文件中 datadir 对应的值为 /var/lib/mysql,如下:

在这里插入图片描述

如果没有编码集和校验集可以设置一下

将来 MySQL 创建的数据库文件都会存储在该目录下,如下:

在这里插入图片描述

4. 数据库基本操作

创建数据库

连接 MySQL 服务器后,通过 create 语句创建一个名为 helloworld 的数据库,如下:

在这里插入图片描述

这时 /var/lib/mysql 目录下,就会多出一个名为 helloworld 的目录,如下:

在这里插入图片描述

使用数据库

使用数据库之前,可以先通过 show 语句查看当前都有哪些数据库,然后再通过 use 语句使用指定的数据库,如下:

在这里插入图片描述

使用数据库可以理解成,就是使用 cd 命令进入到该数据库对应的目录当中。

创建表

这里我们通过 create 语句在 helloworld 数据库中创建一个简单的 student 表,如下:

在这里插入图片描述

通过 show 语句可以查看创建的 student 表结构,如下:

在这里插入图片描述

在 MySQL 的数据存储路径下的 helloworld 目录下,就会多出一个文件 student.ibd,如下:

在这里插入图片描述

表中插入数据

通过 desc 语句可以查看对应的表结构,比如:

在这里插入图片描述

通过 insert 语句可以向表中插入数据,比如:

在这里插入图片描述

查询表中的数据

通过 select 语句可以查看表中的数据,如下:

在这里插入图片描述

结论:

  • 创建数据库本质:在 Linux 下创建一个目录。
  • 在数据库内创建表本质:在 Linux 目录中创建文件。
  • 数据库的本质其实也是文件,只不过这些文件并不是由程序员直接操作,而是数据库服务 (mysqld) 帮我们进行操作。

4. MySQL 架构

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

在这里插入图片描述

MySQL 架构主要可分为如下四层:

  • 连接层:主要完成一些类似连接处理,授权认证及相关的安全方案。
  • 服务层:在 MySQL 数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL接口、SQL解析、SQL分析优化、缓存查询的处理以及部分内置函数执行等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、试图等。
  • 引擎层:由多种可拔插的存储引擎共同组成,真正负责 MySQL 中数据的存储和提取,每个存储引擎都有自己的优点和缺陷。服务层传来的 SQL 语句,通过存储引擎访问数据库的表结构,将数据进行增删查改。
  • 存储层:将数据存储在裸设备的文件系统之上,完成存储引擎的交互。

MySQL 客户端

MySQL 服务器会收到 MySQL 客户端发来的 SQL 语句,并根据 SQL 语句执行对应的操作。

  • 这里的 MySQL 客户端不仅仅指的是连接 MySQL 时使用的 mysql 命令,MySQL 客户端还包括语言接口客户端。
  • MySQL 给各种语言提供的用于访问数据库的接口,用户通过调用这些接口也可以向 MySQL 服务器发送 SQL 语句。

mysql 命令本质是一个可执行程序,通过 file 命令可以看到该可执行程序是采用动态链接的方式生成的,通过 ldd 命令可以看到该可执行程序依赖的 C/C++ 库文件。如下:

在这里插入图片描述

也就是说,mysql 命令本身就是 C/C++ 编写的,因此在编写 mysql 程序时,一定需要调用 MySQL 提供给 C/C++ 的语言接口客户端。当然,MySQL 不仅仅提供了 C/C++ 对应的语言接口,像 Python、Java、PHP 等都有对应的 MySQL 接口。

5. SQL 语句分类

结构化查询语言 (SQL):一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL 语句分类:

  • 数据定义语言 (DDL),用来维护存储数据的结构,代表指令: create,drop,alter
  • 数据操纵语言 (DML),用来对数据进行操作,代表指令: insert,delete,update
  • 数据控制语言 (DCL),主要负责权限管理和事务,代表指令: grant,revoke,commit

说明:DML 中又单独分了一个数据查询语言 (DQL),代表指令: select

6. 存储引擎

存储引擎:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法,MySQL的核心就是插件式存储引擎,支持多种存储引擎。

通过 show 语句可以查看 MySQL 支持的存储引擎。比如:

在这里插入图片描述

其中 MySQL 底层默认使用的存储引擎是 InnoDB,该存储引擎支持事务、行级锁、外键等。

存储引擎对比

在这里插入图片描述

InnoDB 存储引擎是支持事务的,而 MyISAM 存储引擎是不支持的。

http://www.xdnf.cn/news/1307.html

相关文章:

  • 从马拉松到格斗大赛:人形机器人撕开的万亿市场,正在改写AI规则
  • STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式
  • G1 人形机器人硬件构成与接口
  • 图像挖掘课程笔记-第一章:了解机器视觉
  • 【TeamFlow】4.3.2 细化时间单位
  • 设备预测性维护系统部署成本:技术架构与成本优化策略解析
  • Linux——基于socket编程实现简单的Tcp通信
  • Size of map written was 1, but number of entries written was 0. 异常分析
  • 进阶篇 第 7 篇 (终章):融会贯通 - 多变量、模型选择与未来之路
  • 数据可视化--数据探索性分析
  • 数据库MySQL学习——day1(创建表与数据类型)
  • win10中打开python的交互模式
  • Ubuntu 22.04安装IGH
  • CRM系统的功能有哪些?CRM系统功能指南
  • RenderDoc 使用介绍
  • STL C++详解——priority_queue的使用和模拟实现 堆的使用
  • 高新技术申报有哪些潜在风险?如何避免?
  • AI 模型可靠性危机:DeepSeek 输出异常的技术归因与防范实践
  • 算力网络有关论文自用笔记(2)
  • L1-5、Prompt 写作中的常见误区
  • 公路路面病害检测
  • 【AI】SpringAI 第五弹:接入千帆大模型
  • 通过AI工具或模型创建PPT的不同方式详解,结合 Assistants API、DALL·E 3 等工具的功能对比及表格总结
  • 用红黑树封装出set和map
  • Pandas与NumPy高效结合使用指南
  • 利用内联注解析释差异构造多语言sql注入 -- b01lers CTF defense-in-depth
  • Linux从入门到荒废-查找文件中重复的数据
  • SSH 互信被破坏能导致 RAC 异常关闭吗
  • AI大模型:(二)2.3 预训练自己的模型
  • 管理+技术”双轮驱动工业企业能源绿色转型