mysql数据库基础

本篇文章,是mysql基础部分学习的第一篇。我们将重点学习mysql这一款数据库!
本文将对数据库做一个基本的认识,了解mysql的工作原理。

数据库的必要性

虽然我们没有学数据库,但是至少我们能够知道:这是用来存储数据的!

但是,我们很自热地会提出一个问题:
不是已经有文件进行存储数据了吗?为什么还要有数据库?

事实确实如此:文件缺失提供了存储大量数据的能力,但是,也仅仅是提供了存储的功能,以及从文件读写的方法。如果还需要实现其他功能呢?

假设需要从文件中找出所有以128开头的ip地址,又或是删除指定内容,如果只有文件:
那么程序员就需要手动地从文件中读取出数据,然后手动地编写处理代码!

文件保存数据可以总结为以下几个缺点:

  • 文件的安全性问题(可能会泄露)
  • 文件不利于数据查询和管理(文件仅仅有读写方法)
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

而数据库,是专门用于管理数据的东西一款网络程序
它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标

主流数据库

这里我们来介绍几个主流使用的数据库:简单了解一下即可!

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

当然,最受欢迎的就是mysql!我们学习的也正是这一款数据库软件!
下载安装我这里就不讲解了,我使用的是mysql 8.0,系统为Ubuntu 22.04

验证数据库是网络程序

我们已经知道了数据库是什么了,也知道我们学习的是mysql数据库。
现在,我们就以mysql这个数据库来对数据库的本质做了解!这方便后续的学习!

1.mysql是一款CS(Client<->Server)模式的网络程序:
在这里插入图片描述
它的服务器是部署在机器上的,一般是mysqld。在讲解守护进程化的时候,我们就说过:守护进程后的程序,名字后面都会带字母d(daemon)

通过netstat命令证实数据库是网络程序!
在这里插入图片描述

2.mysql的客户端:
我当时是以root账户的身份下载的mysql。
目前,我们就和刚学习Linux系统的时候一样,先拿着root用户进行操作!

在这里插入图片描述
我们直接通过mysql -u(登录的用户名) -h(指明的主机) -p(登录mysql的密码,也可以不写)来进行登录mysql的客户端!

不过我在下载的时候修改过配置文件,所以,主机的选项也可以不写!
这里不太建议在命令行输入的时候显示输入密码,而是只使用-p选项,等待mysql让我们输入密码来进行验证!这样是安全的做法!

我们在mysql的客户端来查询当前连接的端口:
在这里插入图片描述
所以,我们就验证成功了,数据库是一款网络程序!

理解数据库的本质

先说结论,再来证明:

数据库:一般指的是在磁盘/内存中存储的特定结构组织的数据!也可以说是将来存储在磁盘/内存上的一套数据库方案!这个方案,不仅仅是提供存储数据,还能对数据进行一系列操作!

而我们今天下载的mysqld,这是数据库的服务端!专门提供服务的!
我们来看具体的执行流程:
在这里插入图片描述
所以,通过数据库这款软件,就可以把程序员从繁琐的对文件数据进行指定业务逻辑的操作的过程解脱出来,让数据库去做这件事情!

现在,我们大致知道了数据库做的是什么工作了,我们总要见一见数据库到底是什么吧?

Tips:下面就是为了看到数据库是什么,指令我们先不进行讲解!


在这里插入图片描述
我们这里创建了一个新的数据库,名为d1!
通常来说:创建好的数据库会在/var/lib/mysql下存储:
在这里插入图片描述

创建多几个数据库看看:
在这里插入图片描述
我们可以发现,在/var/lib/mysql路径下,新创建多了几个目录(蓝色的),这个就是对应的我们创建的新的数据库!

我们得到第一个结论:创建数据库,其实就是在指定路径下创建一个目录!


在这里插入图片描述
我这里在d1数据库下创建了一个表,叫做person!

我们往这个表里面插入一些新的数据:
在这里插入图片描述

我们可以发现,在d1目录下,出现了一个新的文件person.ibd
结论二:所谓的数据库下建表,就是在对应的文件夹下创建一个新的文件!


最后我们进行一个简单地总结:
在这里插入图片描述

服务器、数据库、表的关系

我们还是需要了解mysql数据库中,服务器、数据库、表之间的关系的!
这是为了我们后面学习数据库的各类操作打基础!

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

数据库服务器、数据库和表的关系如下:
在这里插入图片描述
具体流程就是:

  1. 程序员通过mysql的客户端,连接对应的mysql服务器!
  2. 根据不同的需求,把诸如:建库、建表、查询、搜索等指令发送给mysql的服务端!
  3. 服务端根据客户端输入的指令做词法分析,然后转而对指定的数据库进行操作!
  4. 最后处理结果由服务端返回给客户端!

一个数据库内会存在多张不同的表!这个是需要根据不同的需求来进行操作的!
格式上:有些可能存储的是二进制,有些可能是普通文本!
内容上:有些可能是存储用户的密码用户名、有些可能是存储它们的历史浏览记录的!

mysql的逻辑存储结构

在学习c/c++语言的时候,我们学习过二维、三维数组。
后面讲操作系统的时候,我们理解了硬件——磁盘。


这二者有一个相同点就是:我们理解它们的存储方式、和实际上它们的存储方式是不一样的!

我这里想输出的结论是:
逻辑存储结构,很可能不是实际上的存储结构!
但逻辑结构能够更好地帮助我们理解存储数据,也能让我们更直观地观察到数据!

我们来看看mysql的逻辑存储结构:
在这里插入图片描述
很明显,mysql的逻辑存储结构,就是以列表的形式!展示数据是很清晰的!

SQL语句的分类

我们是通过mysql的客户端输入指令,交给服务端来进行操作数据库文件的!
但其实,我们输入的指令,也可以叫做SQL语句

其实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

mysql的架构

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

我们来了解一下MySQL的架构:
在这里插入图片描述

客户端应用程序
↓ (连接协议) MySQL服务器层
├── 连接层 (Connectors/Connection Pool)
├── 服务层 (SQL Layer)
│ ├── 管理服务 & 工具组件
│ ├── SQL接口 (SQL Interface)
│ ├── 解析器 (Parser)
│ ├── 优化器 (Optimizer)
│ └── 缓存 & 缓冲 (Caches & Buffers)
└── 存储引擎层 (Storage Engine Layer)
↓ 文件系统 (数据文件、日志文件等)


1.​​连接层 (Connection Layer)​​
​​功能​​:处理客户端连接和认证
​​连接管理​​:管理客户端连接(线程池/连接池)
​​身份验证​​:验证用户名/密码/IP权限
​​安全加密​​:支持SSL/TLS加密传输

2.​服务层 (SQL Layer) - MySQL大脑​​
​​功能​​:SQL处理的核心逻辑层

3.存储引擎层 (Storage Engine Layer)​​
​​功能​​:负责数据的存储和提取(​​可插拔式设计​​)

每一层都有自己的作用,它们共同撑起了mysql的高效运作!

存储引擎

存储引擎的认识

存储引擎是:

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

mysql的那么多个存储引擎,是支持拔插设计的,我们可以理解为开关!
打开就是使用,反之就是不使用。使得mysql的使用更加灵活!

我们可以在mysql的客户端输入:

show engines;

查询当前mysql支持的存储引擎:
在这里插入图片描述
其中:InnoDBMyISAM是最常用的两个,前者更为常用!

为什么要设计那么多的存储引擎呢?
答案:不同的存储引擎,针对的场景是不同的!它们针对不同场景各有优势!
通过多种存储引擎的可拔插设计,就可以根据不同的业务来使用合适的存储引擎,提高效率!

存储引擎的对比

在这里插入图片描述
这个表我们稍微了解一下就好了,其实最常用的就是InnoDB

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐