目录

MySQL1-database概述-常见的操作指令-MySQL架构-存储引擎

[MySQL#1] database概述 | 常见的操作指令 | MySQL架构 | 存储引擎

https://i-blog.csdnimg.cn/direct/78eedba59d6242e49cd69bdd998ebfd9.png


目录


在上一篇文章 ,我们安装好了环境,接下来就来一起学习操作吧~

一. 数据库概念

0.连接服务器

mysql -h 127.0.0.1 -P 3306 -u root -p
  • -h:指明登录部署了MySQL服务的 主机
  • -P:指明要访问的 端口号
  • -u:指明登录 用户
  • -p: 指明需要输入密码

注意:

  • 如果没有写-h 127.0.0.1,默认是连接本地
  • 如果没有写-P 3306,默认是连接3306号端口

https://img-blog.csdnimg.cn/img_convert/4909151d353a51235d14714696ae747d.png

1.目前我们是免密码登录的,后面必须设置密码

2.密码输入的时候,是不会回显的


1. 什么是数据库

服务器角度理解数据库

在 连接数据库时,我们使用的是 mysql ,启动数据库服务时使用的是 mysqld 。 这两个分别代表什么呢?

https://img-blog.csdnimg.cn/img_convert/fb77633021d1a3c36ba41bf4791171fa.png

  • mysql 是数据库服务的 客户端。
  • mysqld 是数据库服务的 服务器端。

说明:

  • 凡是可执行程序 带有 d 的,通常称为守护进程。
  • MySQL本质:一个基于C/S(Client/Server)模式的网络服务
  • mysqld 就是网络服务的后端
  • 通常我们提到MySQL,其实指的是MySQL的客户端 mysql

这就是我们对数据库的第一层理解。

  • 现在我们明白了为什么安装MySQL时需要通过 yum 安装 mysqld
  • 并启动服务后才能使用 mysql 进行连接,因为它是一个网络服务。
  • 既然MySQL是网络服务,我们可以查找到它绑定的端口号。

https://img-blog.csdnimg.cn/img_convert/e20f8a2c4cc2e5bdcb88ab66fd08ba51.png

MySQL服务是什么?

  • MySQL是一种 提供数据存取服务的网络程序。

口语中的数据库

数据库通常指的是, 在磁盘或内存中存储的特定结构化的数据 。

  • 数据库可以被看作是一套存储方案,通常指的是关系型数据库,表与表之间有特定的关系, 数据按照特定逻辑进行组织。
  • 数据库最终还是存储在磁盘或内存中。我们暂时只考虑磁盘,存储在磁盘中的一组数据库文件就可以称为数据库,即一批数据以数据库的形式存储在磁盘中。

我们可以区分如下几点:

  • 数据库服务: mysqld
  • 数据库客户端: mysql
  • 数据库:磁盘上存储的一套数据库方案(文件)

数据库的本质仍然是存储在磁盘中的某种结构化数据,虽然我们可能对它的具体形式还不完全理解。文件是我们熟悉的存储形式

为什么数据不直接以文件形式存储,而需要使用数据库呢?

虽然文件提供了数据存储的基本功能,但它 没有提供对数据内容的管理能力。

  • 举个例子,假设一个文件有10万行内容,每行都是一个IP地址,现在 需要统计以 127 开头的IP地址个数。
  • 程序员需要打开文件, 按行读取并手动统计 ,这是一项耗时的工作。
  • 文件只提供基本的读写功能,而没有数据管理能力,因此不方便。

数据库的意义: 它是一种 数据存储的解决方案 。程序员只需提出查询需求,数据库就会根据需求分析并返回结果。 相当于是将数据管理起来了,使数据查询更加方便

例如 ,如果将10万个IP地址 存储到数据库中,查询以 127 开头的IP地址时, 数据库会进行内部处理, 最终返回统计结果 ,而程序员无需自己编写复杂的代码。

总结数据库的作用

数据库本质上是一套对外提供数据存储和管理的解决方案。它包括:

  • 数据库客户端( mysql
  • 数据库服务器( mysqld
  • 存储在磁盘中的数据库文件

数据库的作用是让客户端提出需求后, 服务器从数据库文件中进行操作,最终将结果返回客户端,展示给用户。

理解

https://i-blog.csdnimg.cn/direct/7c19352c3f474d8b8dadc3364d467a25.jpeg

  • 当一个MySQL客户端mysql提出一个需求(查询
  • MySQL服务端mysqld就去数据库文件当中自己进行增、删、查、改等,然后把结果返回给 mysqld
  • 然后mysqld把结果交给mysql,然后就显示给用户了

总结

最后的结论——什么是数据库?

  1. 局部理解: 数据库是存储在 磁盘中的结构化数据文件 ,这些文件能够被 mysqld 服务进程进行增删查改。

  2. 宏观理解:

    数据库是一整套数据存储的解决方案。

文件保存数据的缺点:

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

数据库的存储介质:

  • 磁盘
  • 内存

为了解决文件存储的这些问题,专家们设计了数据库,能够更有效地管理数据。 数据库的使用和管理是衡量程序员水平的重要指标。


二. 🔷基础操作

见一见数据库

  1. 建立数据库,本质就是Linux下的一个目录
  2. 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
  3. 数据库本质其实也是文件!!只不过这些 文件并不由程序员直接操作,而是由数据库服务帮我们进行操作

使用 MySQL 建立一个数据库,建立一张表结构,插入一些数据,最后对比 MySQL 在 Linux 中的表现

  1. 🧫 查看当前数据库
show databases;

此时可以查看当前所有存在的数据库。

  1. 🧫 数据库在哪里存放? 我们可以通过查看 MySQL 的配置文件,找到数据库的存储路径:
vim /etc/my.cnf

https://img-blog.csdnimg.cn/img_convert/7e875a2163582bcd530887880c689d9c.png

在配置文件中,可以看到 datadir 字段,它指明了 MySQL 服务数据存放的路径。

切换到这个路径下,可以看到数据目录中存放的数据内容,包含普通文件和目录。

细心观察,您可能已经发现了一些有趣的现象,我们下面讲讨论

  1. 🧫 创建数据库 接下来,我们通过 MySQL 客户端向 mysqld 服务端发出创建数据库的请求:
create database helloworld;

创建数据库后,原本数据目录中没有 helloworld 这个目录,现在会多出一个名为 helloworld 的目录。

进入该目录后,可以发现除了一个配置文件外,并没有其他文件。

https://img-blog.csdnimg.cn/img_convert/1560d19037a4a0d49c186b06df21f353.png

所谓

建立数据库,实际上是在 Linux 系统下创建了一个目录。

https://img-blog.csdnimg.cn/img_convert/0785ae95c64fa72aef2b1d6fc320516a.png

当客户端发出 create database 的 SQL 指令后, mysqld 进程识别指令并在磁盘上创建一个目录。

这就是数据库在系统层面的表现。

  1. 🧫 选择数据库 在创建数据库后,需要选择操作的数据库:
use helloworld;

就像在文件系统中选择了一个具体的目录一样, use helloworld 代表接下来所有的操作都将在该数据库下进行。

  1. 🧫 创建数据库表 接下来,创建一个名为 student 的表结构:
create table student(
    name varchar(32),
    age int,
    gender varchar(2)
);

表的字段定义了数据的属性列及其类型。建立了表之后,在数据库目录中会生成两个与该表相关的文件。

https://img-blog.csdnimg.cn/img_convert/c33366bf08ca998aa28bc7f2e842ea74.png

  • 在数据库内建立表,本质就是在Linux下创建对应的文件即可!
  • 数据库本质其实也是文件!!只不过这些文件并不是由程序员直接操作,而是由数据库服务帮(mysqld)我们进行 操作。
  1. 🧫 向表中插入数据 现在向 student 表中插入一些数据:
insert into student (name, age, gender) values ('张三', 23, '男');
insert into student (name, age, gender) values ('李四', 24, '女');
insert into student (name, age, gender) values ('王五', 25, '男');

nameagegender 三列中插入相应的数据。 values 后跟的是要插入的具体值。

  1. 🧫 查询表中的数据 使用以下命令查询刚才插入的数据:
select * from student;

https://img-blog.csdnimg.cn/img_convert/8d7c90b228cf9f156ce3ba6ff7660349.png

这会返回表中的所有记录。


总结

  • 数据

    的创建本质 :在 Linux 系统下创建一个 目录。

  • 的创建本质 :创建相应的 文件。

  • 数据存储的本质 :将 数据以结构化的方式存储到这些文件中。

  • 程序员不需要直接操作文件系统,而是通过 SQL 语句与 MySQL 服务交互 ,服务负责在磁盘上执行具体的操作。

操作总结

show
creat
use
creat table //创建一张表
insert //插入数据

注意:

  • 输入时 mysql 命令时, 要加 ;
  • mysql 中有很多库,库中又有很多的表
  • 程序员不关心文件格式,只关心数据和想做什么,交给 sql 去实现即可

三. 主流数据库

以下是根据您的要求整理的内容格式:

MySQL:

  • 世界上最受欢迎的数据库之一,由甲骨文公司拥有。
  • 并发性能良好,但可能不适合处理非常复杂的业务逻辑。
  • 主要应用于电商、社交网络服务(SNS)、论坛等场景,对简单的SQL查询处理效果好。
  • 总结:效率良好,生态完善,免费

SQLite:

  • 轻量级数据库引擎,遵循ACID属性的关系型数据库管理系统。
  • 设计初衷是作为嵌入式解决方案,集成于小型C语言库中。
  • 极其适合资源受限的环境,如 嵌入式系统 ,通常仅需几百KB内存即可运行。

SQL Server:

  • 微软出品的企业级数据库产品。
  • 深受.NET开发者喜爱,适用于中大型项目开发。

Oracle:

  • 也是甲骨文公司的旗舰数据库产品。
  • 针对大型企业级应用设计,能够支持复杂的业务流程。eg 银行(需付费,性能更好
  • 相较于MySQL,在高并发场景下的表现可能略逊一筹。

PostgreSQL:

  • 起源于 加州大学伯克利分校的一个开源关系型数据库项目。
  • 支持广泛的高级功能,无论是个人使用、商业部署还是科学研究均可免费获取、修改和分发源代码。

H2 Database:

  • 一个完全基于 Java编写 的轻量级嵌入式数据库。
  • 可以直接以类库的形式集成到应用程序内部,便于快速开发与测试。

四. 基础知识

服务器,数据库,表关系

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

https://img-blog.csdnimg.cn/img_convert/7c8704ccb028e1a98d6af6c1e06c485a.png

数据逻辑存储

数据逻辑存储 在表中插入数据后,这些数据在 逻辑上是以行列式的结构存储的。

  • 一行表示一个实体(例如一个人)
  • 一列表示实体的某个属性(如姓名、年龄、性别)。

https://img-blog.csdnimg.cn/img_convert/23bbfecbeb185d8830984137d0131f53.png

数据库内的数据在 物理上并 不是直接存储为表的形式,而是通过 MySQL 特定的协议和格式进行存储和管理。


MySQL架构

MySQL是一个可移植的数据库,几乎能在当前所有的操作系统上运行

  • 如 Unix/Linux、Windows、 Mac和Solaris
  • 各种系统在底层实现方面各有不同,但是 MySQL基本上能保证在各个平台上的物理体系结构的一致性

最上面是MySQL客户端,现在我们在Linux下是以命令行方式使用数据库,后面还会以C/C++,图像化界面使用数据库。

整体对于一个MySQL Server来讲主要功能由三层构成:

  • 第一层:连接池 —— 主要是安全连接管理(连接管理、鉴权、保证安全…)。
  • 中间这一层 —— 比如说客户端会下达各种SQL指令,收到指令然后会对指令做各种语法、词法分析,甚至会对SQL语句做一定程度优化按照SQL协议然后下达给下一层。
  • 第三层:存储引擎 —— 匹配的就是一个一个存储引擎,作用有点像计算机 体系结构中的驱动 。下面可能有不同种类的引擎,这些存储引擎从上层接收下达下来的经过词法语法调优过的SQL语句,然后 存储引擎对这些SQL语句 解释 ,说白了 最下面这一层才是真正干事 的,它帮我们去访问指定的数据库文件,访问指定的表。把数据进行增删查改。

https://img-blog.csdnimg.cn/img_convert/ee338e7b0ba0eb66808cf15e58c12b4a.png

怎么会有这么多存储引擎呢?

  • 主要还是因为数据库是给我们提供数据存储服务的,但是这个 数据有种类的差别 ,有的是文档型的,有的是二进制型的,有的是大文件型的等等
  • 所以针对不同种类的数据的需求可能采用不同的存储方案
  • 所以MySQL给我们提供各种各样的搜索引擎,诸如 MyISAM适合大文件读取,InnoDB 有很丰富的索引支持可以方便进行 快速的搜索查找。
  • 所以可以针对不同的场景由用户来配置MySQL底层,采用 不同的存储引擎来满足上层的存储需求。

总结一下MySQL Server有三层

  • 第一层: 安全连接管理
  • 第二层:词法、语法 分析 ,SQL语句 优化
  • 第三层: 解释 SQL 语句 ,具体完成数据存储方案
  • 最下面一层:就是它 依赖的对应文件系统 ,帮我们把数据 以二进制方式 存到特定的目录下然后构建特定的普通文件把数据存储好。

最终总结一下 ,MySQL依旧是一个文件系统,只不过处于OS提供的文件系统之上的一套存储解决方案。

最后一点 ,MySQL提供这么多的解决方案,它是支持热插拔的可以理解成 插件一样 。我们想 选择哪一个就把哪一个存储引擎加载到MySQL里。


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

也可以类似于数据结构来理解:

  • DDL: 定义一个链表
  • DML: 对链表增删查改

存储引擎

1.何为存储引擎?

  • 存储引擎 :数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法

  • MySQL的

    核心 :插件式存储引擎,支持多种

    存储引擎(解释 SQL 语句

  • 查看存储引擎: show engines;

https://img-blog.csdnimg.cn/img_convert/002a93b2e2118aafecdfb2cb2cb1c690.png

2. 存储引擎对比

每一种存储引擎都有自己对应的一大堆功能。大部分情况下MySQL常用的存储引擎是MyISAM,InnoDB。其中更常用的是 InnoDB。

https://img-blog.csdnimg.cn/img_convert/6b1becf1a01bea2e215e4f240cd29d7d.png

之后会再具体的讲到~下篇文章见