数据库基础(二)【MySQL】

news2024/12/28 5:50:48

文章目录

  • 什么是数据库
    • 数据库是运行在操作系统中的软件
  • 为什么需要数据库
  • 有哪些数据库
  • MySQL 的体系架构
    • 网络连接层/API 层
    • 数据库服务层
    • 存储引擎层
    • 系统文件层
  • 什么是 SQL
  • 参考资料

阅读前导:理论上数据库可以在操作系统和网络之前学习,但是这样会让学习层次割裂为两个阶段:第一,会用 SQL 对数据进行 CRUD(增删查改);第二,理解数据库实现的原理,即知道数据库是如何保证在并发时数据的安全性的。其中第二点在系统学习过操作系统(尤其)和网络后才能有较好的体会。

因此本系列会经常以操作系统的角度来讨论数据库在计算机中的作用。

什么是数据库

数据库是一种用于存储和管理数据的电子化系统,它可以让用户对数据进行各种操作,如查询、修改、删除、分析等。数据库的出现是为了解决数据管理的问题,提高数据的安全性、可靠性、一致性和效率。

数据库是运行在操作系统中的软件

从冯诺依曼体系的角度,数据库是一种软件系统,它运行在计算机硬件上,通过操作系统和驱动程序来访问存储设备上的数据文件。

数据库是一种多进程系统,它由一个或多个进程组成,每个进程负责完成特定的功能。进程是程序执行时的一个实例,它具有自己的地址空间和资源。数据库中常见的进程有以下几种:

  • 服务器进程:负责接收客户端进程的请求,并调用相应的模块来处理请求,并将结果返回给客户端进程。服务器进程通常采用多线程模式来提高并发性能。
  • 客户端进程:负责向服务器进程发送请求,并接收服务器进程返回的结果。客户端进程通常是用户通过数据库应用程序或工具来发起的,如 SQL Developer、MySQL Workbench、PHPMyAdmin 等。
  • 后台进程:负责执行数据库的内部功能,如数据缓存、日志记录、恢复、备份、调度等。后台进程通常是数据库系统自动启动和管理的,如 Oracle 的 PMON、SMON、LGWR 等。

例如,执行 mysql -uroot -p 语句,就是用 MySQL 的客户端连接到 MySQL 的服务端。MySQL 的客户端和服务端在 Linux 中的进程的具体名称分别是:

  • MySQL 客户端进程:mysql。这是一个命令行程序,用于与 MySQL 服务器进行交互,可以输入 SQL 语句或者执行 SQL 脚本文件。mysql 进程的参数可以指定连接的服务器地址、端口、用户名、密码等信息。
  • MySQL 服务端进程:mysqld。这是一个守护进程,用于接收和处理客户端的请求,以及管理数据库的文件、内存、网络等资源。mysqld 进程的参数可以指定服务器的配置、日志、插件等选项。

可以使用 ps 命令来查看 MySQL 的客户端和服务端进程的信息,例如:

ps -ef | grep mysql

这个命令会显示所有包含 mysql 字符串的进程的详细信息,如进程号、用户、启动时间、命令行等。

image-20231020171838545

第一行的 mysqld 就是 MySQL 服务器,它是一个守护进程运行在后台。第二行的 mysql 就是 MySQL 客户端,它是由名为 xy 的用户执行的。

上面这种方式是用本地的客户端连接到本地的服务端,实际上 MySQL 服务器是一款网络服务器,它可以连接到指定主机中正在运行的 mysqld 服务器。

image-20231020192017091

为什么需要数据库

在 Linux(操作系统)一切皆文件的语义下,运行在操作系统中的所有软件本质上都是文件,那么数据在数据库眼中也是一堆文件。创建一个数据库,一张表,都会在特定目录下创建对应的文件。

理论上,我们可以单纯地用文件来存储和管理数据,但是在面对工业级的场景下,手动维护文件无法保证数据的安全性,也无法保证效率。也就是说,数据库代替程序员做管理数据这件事,是一种用于存储和管理数据的电子化系统,它有许多优点,比如:

  • 结构化地存储大量的数据信息,方便用户进行有效的检索和访问。
  • 有效地保持数据信息的一致性、完整性、降低数据冗余。
  • 可以满足应用的共享和安全方面的要求,例如需要撤销某些错误的操作。
  • 能够方便智能化地分析,产生新的有用信息。

结合数据库是一个服务器和客户端分离的管理数据的软件,它是用户和文件之间的软件层,用户使用 SQL 让 MySQL 执行对应的操作,以间接地管理数据。数据以何种方式组织,对上层用户是透明的,用户只需要对数据进行增删查改即可。

这里的“管理”区别于操作系统中对文件的管理,数据库的管理主要是面向业务的,而操作系统需要用一定的数据结构和方式来描述和管理文件,以管理文件的属性,而不关心文件本身保存了什么数据。

有哪些数据库

从数据管理的角度,数据库可以分为以下几种类型:

  • 关系型数据库:使用表格的形式来存储和组织数据,每个表格有行和列,每行表示一条记录,每列表示一个属性。关系型数据库使用结构化查询语言(SQL)来操作数据,如 MySQL1、Oracle2、SQL Server 等。
  • 非关系型数据库:不使用表格的形式来存储和组织数据,而是使用其他的数据模型,如文档、键值对、图形、列族等。非关系型数据库通常用于处理非结构化或半结构化的数据,如 NoSQL2、MongoDB、Neo4j 等。
  • 分布式数据库:将数据分散存储在不同的物理位置或网络上,以提高数据的可用性、容错性和并发性。分布式数据库可以是关系型或非关系型的,如 Hadoop、Cassandra、Redis 等。
  • 云数据库:将数据存储在云计算平台上,以利用云服务提供的弹性、可扩展性和成本效益。云数据库可以是传统的数据库软件或者专门为云设计的数据库服务,如 Oracle Cloud Database、Amazon RDS、Google Cloud SQL 等。

根据数据库的存储介质,可以分为以下几种:

  • 磁盘数据库:使用磁盘作为主要的数据存储设备,如机械硬盘、固态硬盘等。磁盘数据库的优点是数据持久性高,容量大,成本低。缺点是访问速度慢,需要缓存和索引来提高性能。常见的磁盘数据库有 Oracle, MySQL, SQL Server 等。
  • 内存数据库:使用内存作为主要的数据存储设备(因此又称主存数据库,Main Memory Database),如随机存取存储器(RAM)。内存数据库的优点是访问速度快,无需缓存和索引。缺点是数据持久性低,容量小,成本高。常见的内存数据库有 Redis, Memcached, VoltDB 等。
  • 光学数据库:使用光学介质作为数据存储设备,如 CD, DVD 等。光学数据库的优点是数据稳定性高,不易受外界干扰。缺点是访问速度慢,容量小,不易修改。光学数据库主要用于数据归档和备份。

光学数据库暂不讨论。

值得注意的是:

  1. 磁盘数据库一般用于数据的持久化,但并非用户的所有 SQL 操作都会使数据刷新到磁盘中,而是存放在缓冲区中,在特定时刻刷新到磁盘中。这么做是减少内存和磁盘的 I/O 次数,以提高存储效率。
  2. 内存数据库虽然读写速度很快,但并非不使用磁盘,内存数据库的启动信息、初始数据等重要信息都需要存储在磁盘中;当可用内存过少时,会将部分数据写入到磁盘中,以减轻内存压力。

MySQL 的体系架构

MySQL 的架构主要分为网络连接层、数据库服务层、存储引擎层和系统文件层四大部分。

mysql-arch

图片来源:https://acronymor.com/posts/mysql/ch01/

MySQL 主要是用 C++ 实现的:

  • 服务层包括连接器(Connector)、查询缓存(Cache)、分析器(Parser)、优化器(Optimizer)和执行器(Executor)等。这一层包含了 MySQL 的大部分核心功能以及所有的内置函数(如日期、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,例如存储过程、触发器等。

  • 存储引擎层负责数据的存储和提取。例如 InnoDB、MyISAM、Memory 等都是存储引擎。

这种架构设计使得服务层成为公用层,而存储引擎层则是多态层,可以按需选择具体的存储引擎。

在 MySQL 中,所有的存储引擎都继承自一个公共的基类。这个基类定义了一些接口和默认行为。每个具体的存储引擎(如 InnoDB、MyISAM 等)都是这个基类的派生类,它们通过重写(覆盖)基类中的方法来实现自己特有的行为。

这种设计使得 MySQL 服务器(作为基类操作的执行者)不需要知道具体正在使用哪个存储引擎,它只需要调用基类定义的接口即可。至于这些接口如何具体执行,则取决于运行时所使用的具体存储引擎实例,这就实现了多态。

网络连接层/API 层

由于 MySQL 是一款 C/S 软件,直接管理数据的主体是 mysqld(服务器),在真实的业务场景中,应用程序和实际的数据库一般是部署在不同的服务器中的,MySQL 客户端和服务器之间的连接通常是通过 TCP/IP 协议进行的。

所以网络连接层也叫 API 层。它负责提供给外部应用程序访问 MySQL 数据库的接口。API 层由 MySQL 提供的各种客户端库组成,包括 C/C++、Java、Python、PHP 等语言的库。

MySQL 客户端是一个命令行程序,也就是说它是一个可执行程序,准确地说,它是采用动态链接生成的可执行程序。

image-20231020210441002

通过 file 命令可以知道 mysql 客户端可执行程序是多态链接的,lld 命令可以查看它依赖的库。

数据库服务层

条目说明
系统管理和控制工具提供数据库系统的管理和控制功能,例如对数据库中的数据进行备份和恢复,保证整个数据库的安全性,提供安全管理,对整个数据库的集群进行协调和管理等。
连接池主要负责存储和管理客户端与数据库的连接信息,连接池里的一个线程负责管理一个客户端到数据库的连接信息。
SQL 接口主要负责接收客户端发送过来的各种 SQL 命令,并将 SQL 命令发送到其他部分,并接收其他部分返回的结果数据,将结果数据返回给客户端。
解析器主要负责对请求的 SQL 解析成一棵“语法树”,然后根据 MySQL 中的一些规则对“语法树”做进一步的语法验证,确认其是否合法。
查询优化器在 MySQL 中,如果“语法树”通过了解析器的语法检查,此时就会由优化器将其转化为执行计划,然后与存储引擎进行交互,通过存储引擎与底层的数据文件进行交互。
缓存MySQL 的缓存是由一系列的小缓存组成的。例如:MySQL 的表缓存,记录缓存,MySQL 中的权限缓存,引擎缓存等。MySQL 中的缓存能够提高数据的查询性能,如果查询的结果能够命中缓存,则 MySQL 会直接返回缓存中的结果信息。

存储引擎层

存储引擎是数据库底层的组件,是数据库的核心,主要负责数据的写入和读取,与底层的文件进行交互。它规定了数据存储时的存储结构。使用存储引擎可以创建、查询、更新、删除数据库。不同的存储引擎提供的存储方式、索引机制等也不相同。

MySQL 中的存储引擎是插件式的,服务器中的查询执行引擎通过相关的接口与存储引擎进行通信。什么意思呢?就是我们可以指定不同的存储引擎,但是它们的使用方法都是通过同一套上层接口实现的。同时,接口屏蔽了不同存储引擎之间的差异(因为它们使用了 C++的继承和多态)。MySQL 中,最常用的存储引擎就是 InnoDB 和 MyISAM。

条目InnoDBMyISAM
事务支持支持不支持
存储结构所有的表都保存在系统表空间,或者每张表各自的表空间每张表在磁盘上存储成三个文件
存储空间需要更多的内存和存储,在主内存中建立其专用的缓冲池用于高速缓冲数据和索引可被压缩,存储空间较小
表锁差异支持事务和行级锁只支持表级锁
全文索引不支持 (FULLTEXT 类型的) 全文索引,但是 innodb 可以使用 sphinx 插件支持全文索引,并且效果更好支持 (FULLTEXT 类型的) 全文索引
主键如果没有设定主键或者非空唯一索引,就会自动生成一个 6 字节的主键 (用户不可见),数据是主索引的一部分,附加索引保存的是主索引的值允许没有任何索引和主键的表存在,索引都是保存行的地址
外键支持不支持
image-20231020205952174

MySQL 支持多种不同的存储引擎,包括处理事务安全表的引擎和处理非事务安全表的引擎。在 MySQL 中,你可以根据对数据处理的不同需求选择合适的存储引擎,这样不仅可以提高数据存储和检索的效率,还可以降低高并发情况下的数据压力。

系统文件层

系统文件层主要包括 MySQL 中存储数据的底层文件,与上层的存储引擎进行交互,是文件的物理存储层,是整个系统的核心,负责存储数据库中的数据。存储层由以下几个主要组件组成:

  • 表空间:存储数据库中的表、索引、日志等数据。
  • 引擎:负责处理数据库的读写操作。
  • 缓冲池:存储最近访问过的数据,提高数据访问效率。
  • 日志:记录数据库的变更信息,用于数据恢复。
条目说明
日志文件包括错误日志、通用查询日志、二进制日志、慢查询日志等
数据文件db.opt 文件、frm 文件 (MySQL 8.0 无此文件)、MYD 文件、MYI 文件、ibd 文件、ibdata 文件、ibdata1 文件、ib_logfile0 和 ib_logfile1 文件等。
配置文件在 Unix/Linux 环境中是 my.cnf 文件,在 Windows 环境中是 my.ini 文件。
pid 文件pid 文件是存放 MySQL 进程运行时的进程号的文件
socket 文件socket 文件和 pid 文件一样,都是 MySQL 在 Unix/Linux 环境中运行才会有的文件。

什么是 SQL

SQL 是 Structured Query Language 的缩写,即结构化查询语言。它是一种用于数据库管理系统(DBMS)的计算机语言,用于存储、检索和管理数据库中的数据。SQL 是关系数据库管理系统 (RDBMS) 的标准语,由 ISO(国际标准组织)定义。

SQL 通常可以分为以下几类:

  • DDL(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等。例如,CREATE DATABASE 用于创建新数据库,CREATE TABLE 用于创建新表,ALTER TABLE 用于修改表结构,DROP TABLE 用于删除表。
  • DML(Data Manipulation Language):数据操作语言,用来对数据库记录(数据)进行操作。例如,INSERT INTO 用于插入新数据,UPDATE 用于更新已有数据,DELETE FROM 用于删除数据。
    • DQL(Data Query Language):数据查询语言,用来查询记录(数据)。如 SELECT 用于查询数据。
  • DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别。例如,GRANT 用于授予用户权限,REVOKE 用于撤销用户权限,COMMIT 用于提交事务。

这些都是 SQL 的主要组成部分,每一种都有其特定的用途和语法。

其中,DQL 在一定程度上可以被视为 DML 的一部分。在查询语句还没有太过复杂时,查询语句是属于 DML 的。但随着查询语句逐渐细化增多,查询语句被单独提出来作为 DQL 进行学习。

参考资料

  • https://acronymor.com/posts/mysql/ch01/
  • https://blog.csdn.net/chenlong_cxy/article/details/128055520

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1120074.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机组成原理 new05 第二章01 R进制和十进制的转换

文章目录 为什么计算机要使用二进制基数 R进制二进制十进制八进制十六进制R进制转十进制R进制转十进制二,八,十六进制数的相互转换进制转换关系关于二进制和八进制之间的互相转换进制的转换(精度问题)进制大小的比较 为什么计算机要使用二进制 基数 基数…

论文阅读:Graphics2RAW: Mapping Computer Graphics Images to Sensor RAW Images

论文阅读:Graphics2RAW: Mapping Computer Graphics Images to Sensor RAW Images 这是一篇 ICCV 2023 的文章,主要介绍了一种数据仿真的方式。 Abstract CG 渲染得到的图像与相机拍摄得到的图像越来越像了,这种摄影级的渲染逼近效果让越来…

Unity Profiler 详细解析(一)

Overview: . Profiler简介 . Profiler各模块介绍 . 各平台下Profiler的使用 . 基于Profiler的优化定位 . Profiler的主要参数详解 . Profiler案例 Profiler简介 Profiler 是Unity中分析性能开销的工具 • 各种开销一览无遗 • 可跨平台使用(Web、PC、iOS、Android、…

Visual Studio 2022下载安装的详细步骤-----C语言编辑器

目录 一、介绍 (一)和其他软件的区别 (二)介绍编写C语言的编辑器类型 二、下载安装 三、创建与运行第一个C语言程序 (一)创建项目 (二)新建文件 (三&#xff09…

Bag of Tricks for Efficient Text Classification(FastText)

主要的有点就是快,用途就是用于文本分类,模型结构如上,主要是通过embedding将文本转换成向量,然后进行mean-pooling,然后输入到hidden隐向量中,通过softmax输出多分类,损失函数是对数似然损失函…

CDA level II 知识点 根据模拟题抱佛脚速记

第一章 市场调研的基本步骤:提出问题-->理论推演-->收集材料-->构建模型-->归因分析。 定性研究方法:1、文案调查法;2、深度访谈法;3焦点小组座谈法;4、投影技法。 一般离中趋势的指标有:标…

Transformers基本组件(二)快速入门Datasets、Evaluate、Trainer

Transformers基本组件(二)快速入门Datasets、Evaluate、Trainer 1、基础组件Datasets 数据集部分的工作,一部分在于数据集的收集,另一部分在于数据集的处理。Datasets库的出现,一定程度上也使得这两部分的工作变得简…

学习杂谈1

不知道写些什么就想着把这段时间网上看到的一些面试题写下来,供各个找工作的人参考 简述一下RabbitMQ的工作模式 simple模式(即最简单的收发模式) 消息产生消息,将消息放入队列消息的消费者(consumer)监听:消息队列&a…

YOLOV8改进:RefConv(即插即用重参数化重聚焦卷积替代常规卷积,无额外推理成本下涨点明显)

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:RefConv,实现有效涨点! 论文地址…

游戏设计模式专栏(十三):在Cocos游戏开发中运用责任链模式

点击上方亿元程序员关注和★星标 引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 责任链模式&#xff…

面试题:谈谈过滤器和拦截器的区别?

文章目录 一、拦截器和过滤器的区别二、拦截器和过滤器的代码实现1、拦截器2、过滤器 三、总结1、什么是Filter及其作用介绍2、Filter API介绍3、Filter链与Filter生命周期 四、拦截器五、过滤器和拦截器的区别 一、拦截器和过滤器的区别 1、拦截器(Interceptor)只对action请求…

全球国家行政区划边界(中国科学院地理科学与资源研究所)

简介: 行政区划边界是指各个行政区域之间划定的界限,以确保行政管理的有序和合法。通常,这些边界是根据政治、行政、文化等因素来划分的,如国家、省份、市级行政单元、县区等。这些行政区划边界的划分和调整需要经过政府的制定和…

proteus中仿真arduino的水位测试传感器

一、原理介绍 我们这里使用的水位传感器,只能说是一个小实验用途的水位传感器。我们首先上图 如上图所示,线没有连接,传感器由许5对裸露在外的铜线片作为传感部分,当浸入水中时这些铜线片会被水桥接。 这些被水连接起来的铜线&a…

CUDA学习笔记(二)CUDA简介

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/,仅用于学习。 CUDA是并行计算的平台和类C编程模型,我们能很容易的实现并行算法,就像写C代码一样。只要配备的NVIDIA GPU,就可以在许多设备上运行你的并行程序&#xf…

2024王道考研计算机组成原理——指令系统

零、本章概要 指令寻址:解决的是PC"1"的问题 数据寻址:使用寄存器/内存/结合 基址寻址:用于多道程序的并发执行 直接寻址:call 0x12345678 变址寻址:esi edi用于循环,因为使用直接寻址需要一堆…

TX Text Control ActiveX 32.0 For VB6 Crack

ActiveX Visual Basic 6 应用程序的文档处理,TX Text Control适用于 Visual Basic 6 和基于 COM 的语言的综合文字处理和报告 视窗用户界面,功能齐全的文档编辑器 TX Text Control 是一款完全可编程的丰富编辑控件,它在专为 Visual Studio 设…

自然语言处理---Transformer机制详解之BERT模型介绍

1 BERT简介 BERT是2018年10月由Google AI研究院提出的一种预训练模型. BERT的全称是Bidirectional Encoder Representation from Transformers.BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且在11种不…

计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

车辆跟踪及测距 该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和…

最新AI智能写作创作系统源码V2.6.4/AI绘画系统/支持GPT联网提问/支持Prompt应用

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统AI绘画系统,支持OpenAI GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署…

[深入浅出AutoSAR] SWC 设计与应用

依AutoSAR及经验辛苦整理,原创保护,禁止转载。 专栏 《深入浅出AutoSAR》 全文 3100 字, 包含 1. SWC 概念 2. 数据类型(Datatype) 3. 端口(Port) 4. 端口接口(Portinterface&…