MySQL数据库的介绍
目录
1.什么是MySQL数据库
2.MySQL数据库的设计
MySQL的进一步认识
MySQL的客户端 —— mysql
MySQL的服务端 —— mysqld
3.MySQL数据库的架构
MySQL架构图
连接层
服务层
存储引擎层
文件系统层
4.MySQL的存储引擎
认识存储引擎
MySQL中的存储引擎
存储引擎之间对比
1.什么是MySQL数据库
众所周知,数据库的作用是用来存储数据的,但是在数据库被发明出来之前,人们是依靠文件来存储数据,相信你也有这样的疑问,存储数据用文件不是挺好的吗,为什么还要有数据库呢?
因为,我们把数据存储起来,并不单单是为了存储数据,更重要的是,我们还需要使用数据,对数据做必要的增、删、改、查;一般的文件确实提供了数据的存储功能,但是并没有提供非常好的数据管理能力,使用文件存储数据有以下几个缺点
- 数据的安全性难以保证
- 不利于数据的查询和管理
- 使用程序操作文件不便
这就要求有一种新的 能够存储数据的 并且还具有对数据的管理能力的事物来解决文件的这个短板,于是,计算机的大佬们设计出了更加利于管理数据的东西 —— 数据库。
那数据库是什么呢?数据库就是一种提供数据存储能力的文件,有自己的格式,能够让 mysqld 这样的服务直接进行增删查改,同时,数据库也提供了一套数据存储方案。
而MySQL数据库就是数据库的一种具体实现,是一种具体的存储解决方案。
2.MySQL数据库的设计
MySQL的进一步认识
前面说了MySQL数据库是一套具体的存储解决方案,那这套存储解决方案是如何设计的呢?
我们可以使用 netstat -ltp 命令查看一下系统中运行的网络服务,列出所有处于监听状态的TCP端口以及每个端口上运行的程序名称和进程PID
我们可以看到 mysql 居然位列其中,说明MySQL是一种网络程序,也就是说,MySQL被设计成了一套网络服务程序。
网络程序往往都具有客户端程序 和 服务器端程序,MySQL也不例外,MySQL的客户端程序是 mysql,MySQL的服务器端程序是 mysqld; 我们可以使用 which 命令查看MySQL 客户端程序 和 服务器端程序 所在的路径
所以我们可以进一步认识MySQL,MySQL的本质是一套基于CS模式的,提供数据存取服务的网络程序。
MySQL的客户端 —— mysql
MySQL的客户端是连接MySQL服务器并进行数据库操作的工具。这些客户端可以是命令行界面(CLI)的,也可以是图形用户界面(GUI)的;用户可以通过 mysql 向MySQL服务端 发送SQL语句(一种操作数据库的语言),进而来操作数据库,对数据库进行管理。 用户上层只需要输入SQL语句,MySQL的服务端会执行相应的语句,实现用户想要的结果。
MySQL的服务端 —— mysqld
MySQL的服务端负责处理客户端的连接请求、执行SQL语句、管理数据库文件和数据等任务。
服务端必须要能够为客户端提供良好稳定的运行服务,这就要求服务端的设计足够优秀、足够合理;因此,MySQL的服务端被设计成了四个层次,分别是连接层、服务层、存储引擎层、文件系统层,这四层统称为MySQL数据库的架构。
3.MySQL数据库的架构
MySQL架构图
连接层
功能:连接层是MySQL架构中的最外层,负责处理客户端与MySQL服务器之间的连接和通信。它主要负责监听客户端的连接请求,进行权限验证,并维持和管理连接。(解决安全和链接管理)
组件:
- Connectors:MySQL为各种编程语言提供了访问接口(如JDBC),通过这些接口,客户端程序可以连接到MySQL服务器。
- 连接池(Connection Pool):为了提高性能和响应速度,MySQL实现了连接池机制。连接池可以复用已经创建的数据库连接,减少创建和销毁连接的开销。同时,连接池还可以限制同时存在的连接数,避免服务器资源耗尽。
服务层
功能:服务层是MySQL架构中的核心部分,负责处理来自客户端的SQL请求,包括SQL解析、优化、缓存以及执行等。(词法语法分析。做词法语法分析,以及sql语句的优化)
组件:
- SQL Interface:是整个数据系统与用户进行交互的关键部分,负责接收并处理用户的SQL命令。
- Parser(语法分析器):将用户输入的SQL命令转换成MySQL内部可以理解的指令,并进行词法分析和语法分析,最终生成一棵解析树。
- Optimizer(查询优化器):根据解析树生成最优的执行计划,包括选择合适的索引、确定连接顺序等,以提高查询性能。
- Cache & Buffers(缓存):在较早的MySQL版本中,存在查询缓存机制,用于缓存查询结果以提高查询性能。但从MySQL 8.0开始,查询缓存被删除,因为维护缓存的开销可能大于其带来的性能提升。此外,MySQL还包含其他类型的缓存,如表缓存、索引缓存等。
- 执行器:根据优化器生成的执行计划,调用存储引擎提供的API来执行SQL语句,并返回查询结果给客户端。
MySQL架构中的这一层的工作有些类似于编译器的工作,只是解析和优化语句,并不直径执行用户输入的语句。
存储引擎层
功能:存储引擎层负责数据的存储和提取,是MySQL架构中最底层也是最重要的部分之一。MySQL支持多种存储引擎,每种存储引擎都有其特点和适用场景。帮我们完成具体的数据存储方案。(这一层才是真正干活的)
组件:
- InnoDB:MySQL的默认存储引擎,支持事务处理、行级锁定和外键等高级数据库功能。
- MyISAM:早期MySQL的默认存储引擎,但不支持事务处理,主要面向读密集型应
- Memory:将数据存储在内存中,访问速度极快,但重启数据库后数据会丢失。
- 其他存储引擎如Archive、Federated、CSV等,分别适用于不同的应用场景
文件系统层
功能:虽然文件系统层不直接体现在MySQL的官方架构图中,但它是存储引擎层与底层硬件之间的桥梁。文件系统层包含了MySQL的数据文件和日志文件等,是数据存储和访问的物理基础。
4.MySQL的存储引擎
认识存储引擎
MySQL的四层模型中,除了存储引擎层,其他三层都好理解。要想理解存储引擎,先要理解什么是引擎。
引擎二字的理解可以类比于汽车的发动机,发动机是用来驱动汽车进行运转的,MySQL的存储引擎也扮演着类似的角色。MySQL的存储引擎用来驱动这个数据库系统进行运转,它是数据库系统中负责数据存储、处理、保护和查询的核心组件,决定了数据库提供的功能、性能和特性。通过选择合适的存储引擎,可以优化数据库的性能和满足特定的应用需求。
具体来说,存储引擎是数据库中负责数据存储、处理、保护和查询的底层软件组织。它决定了数据库如何存储数据、如何为这些数据建立索引、以及如何进行数据的更新和查询等操作。不同的存储引擎采用不同的技术和方法来实现这些功能,因此它们提供的性能、功能和支持的特性也会有所不同。
在MySQL等数据库管理系统中,存储引擎是基于表的,而不是基于数据库的。这意味着在同一个数据库中,可以为不同的表选择不同的存储引擎,以满足不同的应用需求。例如,InnoDB存储引擎支持事务处理、行级锁定和外键约束等高级数据库功能,适合需要高可靠性和高性能的在线事务处理(OLTP)应用;而MyISAM存储引擎则提供了快速的读写速度和全文索引功能,适合以查询和插入操作为主的应用场景。
总结:存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL中的存储引擎
我们可以通过 show engines 在MySQL中查看存储引擎的种类。
可以看出MySQL支持多种存储引擎,这也是MySQL数据库的核心;其中默认的存储引擎是 InnoDB。
存储引擎之间对比
相关文章:

MySQL数据库的介绍
目录 1.什么是MySQL数据库 2.MySQL数据库的设计 MySQL的进一步认识 MySQL的客户端 —— mysql MySQL的服务端 —— mysqld 3.MySQL数据库的架构 MySQL架构图 连接层 服务层 存储引擎层 文件系统层 4.MySQL的存储引擎 认识存储引擎 MySQL中的存储引擎 存储引擎之…...

div内英文不换行问题以及解决方案
div内英文不换行问题以及解决方案 div盒子中文字换行问题:div中放中文的代码:div中放英文的代码: 解决办法注意 div盒子中文字换行问题: div设置宽度以后,如果div中放的是中文,默认文字超过div宽度会自动换…...

『功能项目』DOTween动态文字【26】
打开上一篇25协程生成怪物模型的项目, 本章要做的事情是用DOTween插件做一个动态文字效果 首先在资源商店中免费下载一个DOTween插件 新建脚本:DowteenFlicker.cs 编写脚本: using DG.Tweening; using UnityEngine; using UnityEngine.UI;pu…...
经验笔记:框架(Framework)与库(Library)
框架(Framework)与库(Library)的经验笔记 引言 在现代软件开发过程中,框架(Framework)与库(Library)是两个不可或缺的概念。虽然它们都是为了提升开发效率和服务复用性…...
每日一题——第八十七题
题目:给出年月日,计算该日期是这一年的第几天 #include<stdio.h> #include<stdbool.h>bool isLeapYear(int year) {return (year % 4 0 && year % 100 ! 0) || (year % 400 0); }int dayOfYear(int year, int month, int day) {/…...

CTF——简单的《WEB》
文章目录 一、WEB1、easysql2、baby_web3、baby_sql4、upload_easy5、easygame拓展1.1拓展1.2 6、ht_ssti7、包容乃大 一、WEB 1、easysql 题目描述: sql注入漏洞 1.常用的sql注入测试语句 2.sql注入bypass 解题思路 这边提示基本给的也很完整的,不…...

【Nacos】报错之服务实例类型不允许改变
在使用Nacos配置服务的实例类型的时候,对服务的实例类型进行修改。 之前的非临时实例,修改为临时实例后,报错: com.alibaba.nacos.api.exception.NacosException: errCode: 400, errMsg: Current service DEFAULT_GROUPproduct-…...

SRS流媒体服务器从入门到精通(其一,环境搭建)
欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力! 江山如画,客心如若,欢迎到访,一展风采 文章目录 一、SRS简介二、SRS的应用场景三、环境搭建…...
Java Native Interface (JNI) 简介
Java Native Interface (JNI) 概述 Java Native Interface (JNI) 是 Java 提供的一种接口,用于允许 Java 应用程序与本地(Native)代码进行交互。通过 JNI,Java 代码可以调用 C/C 等其他语言编写的库,反之亦然。JNI 的主…...

navigator.mediaDevices.getUserMedia检查用户的摄像头是否可用,虚拟摄像头问题
在Web开发中,检查用户的摄像头是否可用是一个常见的需求,尤其是在需要视频聊天或录制视频的应用程序中。navigator.mediaDevices.getUserMedia() API 提供了这一功能,它允许你请求访问用户的媒体设备,如摄像头和麦克风。虽然这个A…...

跨境网红营销SOP流程1.0丨出海笔记
品牌出海利用红人营销基本是标配了,KOL 社交媒体是绝对的带货神器。比如美国歌手蕾哈娜Rihanna 的美妆品牌 Fenty Beauty 上市开卖后40天就达到了1亿美元,火遍全球美妆圈。例子和废话少说,其实大小红人都有用。 之前几位大神已经在出海笔记分…...

Jedis,SpringDataRedis
快速入门 导入依赖 <!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><!--单元测试--><dependency><groupId>org.ju…...

增量模型的优点例题
答案:D 解析:增量模型可以快速开发一个样品供客户查看 选项B 早期的增量作为模型,从而可以加强系统后续需求的理解 一开始给客户一个样本,客户根据样品修改需求 选项C 增量模型就是开发一个个增量模型,供客户使用…...
求绝对值
计算并输出一个实数的绝对值。从键盘任意输入一个实数,不使用计算绝对值函数编程计算并输出该实数的绝对值 输入格式: 输入任一实数。 输出格式: 输出的绝对值包含两位小数。 输入样例: 在这里给出一组输入。例如: -2.5输出样例: 在这里给出相应的输出。…...

AlphaNovel的身份验证失败了..........
我的AlphaNovel的这个身份验证失败了,不知道失败原因是什么... 前两周在网上看到这个项目,在国外这个网站搬运国内小说,但是前提是要通过这个身份验证,可是我等了十多天,结果身份验证失败了,有也在做这个的同志吗? 你们身份验证怎么样...

Sapiens:人类视觉模型的基础
文章目录 摘要1、引言2、相关工作3、方法3.1、Humans-300M 数据集3.2、预训练3.3、二维姿态估计3.4、身体部位分割3.5、深度估计3.6、表面法线估计 4、实验4.1、实现细节4.2、二维姿态估计4.3、身体部位分割4.4、深度估计4.5、表面法线估计4.6、讨论 5、结论 摘要 我们介绍了 …...

“健康中国 医路无忧——公益联盟”积极响应,国内首支公益陪诊师志愿队伍正式成立
在快节奏的现代生活中,就医不再是简单的“看病”那么简单。面对复杂的医疗流程、专业的医学术语、以及在陌生环境中的焦虑,患者及家属往往感到无所适从。此时,陪诊服务如同一束光,照亮了就医之路,它的重要性不仅体现在…...

Java 创建对象方法的演变
1、普通 Java 代码 public class Rectangle {private int width;private int length;public Rectangle() {System.out.println("Hello World!");}public void setWidth(int widTth) {this.width widTth;}public void setLength(int length) {this.length length;}…...
Netty中用到了哪些设计模式
Netty作为一个高性能的网络通信框架,里面有很多优秀的代码值得我们学习,今天我们一起看下Netty中用到了哪些设计模式。 一、单例模式 Netty通过 NioEventLoop 将通道注册到选择器,并在事件循环中多路复用它们。其中提供了一个选择策略对象 S…...

第67期 | GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...

初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...