MySQL介绍

1 什么是Mysql

MySQL是一个开源的关系型数据库管理系统(RDBMS),它使用结构化查询语言(SQL)进行数据库管理。自上世纪90年代中期以来,MySQL凭借其易用性、稳定性和高效性能,赢得了广泛的用户群体,成为互联网上许多重要应用的底层数据存储解决方案。

MySQL支持多种操作系统,包括Windows、Linux、macOS等,具有良好的跨平台兼容性。它提供了大量的API接口,允许用户通过多种编程语言(如C、C++、Python、Java等)与数据库进行交互。此外,MySQL还支持各种存储引擎,如InnoDB、MyISAM等,每种引擎都有其特定的优势和适用场景。

在数据管理方面,MySQL提供了强大的数据完整性保障,通过事务处理、ACID特性(原子性、一致性、隔离性、持久性)以及外键约束等功能,确保数据的准确性和可靠性。同时,MySQL还支持索引、视图、存储过程和触发器等高级数据库对象,使得数据查询、更新和管理变得更加灵活和高效。

MySQL还具备高度的可扩展性和可定制性。用户可以根据实际需求调整数据库配置,优化性能。此外,MySQL社区活跃,拥有丰富的文档和教程资源,方便用户学习和解决问题。

总的来说,MySQL是一个功能强大、稳定可靠、易用灵活的关系型数据库管理系统。无论是个人开发者、小型企业还是大型企业,都可以利用MySQL构建高效、安全的数据库应用,满足各种数据存储和管理需求

2 Mysql的架构

  • 客户端:

    • 负责编写SQL通过三次握手和服务端建立连接,支持python、Java、php等各种语言编写

  • 应用层:

    • 这是MySQL架构的最上层,主要负责处理与客户端的交互。

    • 连接处理:管理客户端与MySQL服务器之间的连接,包括连接的建立、维护和关闭,以及连接资源的分配和释放。

    • 用户鉴权:用于验证客户端的身份,支持多种身份验证方法,确保数据的安全性。

    • 安全管理:包括访问控制、权限管理和数据加密等,防止未经授权的访问和数据泄露。

  • MySQL服务层:

    • 连接器:负责接收来自客户端的连接请求,建立和管理连接。

    • 查询缓存:存储之前执行过的查询及其结果,以便在相同的查询再次出现时能够直接返回结果,提高查询效率。

    • 解析器:将SQL语句解析成数据结构,供后续步骤使用。

    • 优化器:根据解析后的查询结构,使用查询优化算法选择最优的执行计划。

    • 执行器:按照优化器生成的执行计划执行查询,并返回结果。

  • 存储引擎层:

    • 负责数据的存储和提取。MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等,每种引擎都有其特定的优势和适用场景。

    • 插件式的架构模式使得存储引擎可以灵活替换和扩展。

  • 系统文件层:

    • 负责将数据实际存储在文件系统中,确保数据的持久化。

3 SQL语句的执行过程

SQL语句的读取数据和写入数据的执行过程涉及多个步骤,这些步骤确保了数据从数据库中的正确检索或存储。以下是这两种类型操作(读取和写入)的详细执行过程:

读取数据(如SELECT语句)的执行过程:

  • 客户端层:

    1. 客户端编写SQL语句,从客户端连接池冲获取新的连接,有空余的连接则使用空余的连接,无则创建新的连接,超过最大的连接数则等待连接释放。

  • 网络连接层

    1. 验证客户端的连接信息进行校验,账号密码验证失败给客户端抛错。

    2. 服务端从连接池中取出一个连接和客户端进行通信,有空闲的连接则使用空闲的连接,没有则创建新的连接,超出最大连接数量则等待连接释放。

    3. 验证用户操作的数据库的权限,对用户操作的数据库进行授权。

  • 服务层

    1. SQL接口层查询是否有缓存,有缓存则直接通过服务层返回

    2. SQL语句被解析器接收并分解。解析器会检查SQL语句的语法是否正确,并识别出所有的关键字、表名、列名等。解析器会生成一个查询计划或解析树,该计划描述了如何获取所需的数据。

    3. 询优化器会接收解析树,并尝试找出执行查询的最有效方法。优化器会考虑多种因素,如表的大小、索引的存在与否、数据的分布等,以确定最佳的查询路径。优化器可能选择不同的索引、连接顺序或过滤条件,以最小化I/O操作和提高查询速度。

  • 存储引擎层:

    1. 引擎开始执行优化后的查询计划。根据查询计划,执行引擎可能需要进行表扫描、索引扫描、连接操作、聚合操作等。执行引擎会从磁盘读取数据块到内存中,并进行必要的计算和处理。对于复杂的查询,执行引擎可能需要与其他查询执行器进行交互以获取中间结果。

  • 文件层:

    1. 和存储引擎层交互,将数据返回给SQL接口,SQL接口对结果集做完处理之后返回给客户端。

写入数据(如INSERT、UPDATE、DELETE语句)的执行过程:

  • 客户端层:

    1. 客户端编写SQL语句,从客户端连接池冲获取新的连接,有空余的连接则使用空余的连接,无则创建新的连接,超过最大的连接数则等待连接释放。

  • 网络连接层

    1. 验证客户端的连接信息进行校验,账号密码验证失败给客户端抛错。

    2. 服务端从连接池中取出一个连接和客户端进行通信,有空闲的连接则使用空闲的连接,没有则创建新的连接,超出最大连接数量则等待连接释放。

    3. 验证用户操作的数据库的权限,对用户操作的数据库进行授权。

  • 服务层

    1. SQL接口查询缓存,有对应SQL的缓存删除防止查询时击中缓存

    2. 与读取数据类似,SQL写入语句首先被解析器接收并分解。解析器检查语法并生成一个描述如何修改数据的执行计划。

    3. 优化器根据SQL制定出不同的执行方案,并择选出最优的执行计划。

  • 全局日志

    • 记录Undo日志和Redo日志的状态

  • 存储引擎层

    1. 根据执行计划,引擎开始执行写入操作

    2. 对于INSERT语句,新行会被添加到表中。

    3. 对于UPDATE语句,现有行的数据会被修改。

    4. 对于DELETE语句,现有行会被标记为删除(分物理删除或逻辑删除)

    5. 记录bin日志

  • 文件层

    1. 将数据持久化到文件中

4 数据库的三大范式

数据库的三大范式主要是用来规范数据库设计的,确保数据库结构简洁、明晰,并避免插入、删除和更新操作异常。这三大范式分别是:

  1. 第一范式(1NF)

  • 要求:每一列属性都是不可再分的属性值,确保每一列的原子性(表里的字段不可拆分)。

  • 解释:在关系模型中,对于添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。

  • 反例:如果有一个字段包含多个值(如字段包含数组或记录),那么它就不满足第一范式。

  1. 第二范式(2NF)

  • 要求:在满足第一范式的基础上,不存在非关键字段对任意候选键字段的部分函数依赖(存在于复合主键的情况下)。

  • 解释:数据库表中的每个实例或记录必须可以被唯一地区分。简单来说,就是非主键字段必须完全依赖于主键,不能只依赖于主键的一部分。

  • 反例:例如,如果一个表由学号和课程名称作为联合主键,但成绩字段只依赖于学号,那么就存在部分函数依赖,不满足第二范式。

  1. 第三范式(3NF)

  • 要求:在满足第二范式的基础上,非主键字段不能相互依赖,即不存在传递依赖。

  • 解释:非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。

  • 反例:如果一个表中的字段A依赖于字段B,而字段B又依赖于字段C(主键),那么就存在传递依赖,不满足第三范式。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

政安晨:【Keras机器学习实践要点】(三)—— 编写组件与训练数据

目录 介绍 编写组件 训练模型 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏: TensorFlow与Keras机器学习实战 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 介绍 通过 Ker…

手写简易操作系统(十七)--编写键盘驱动

前情提要 上一节我们实现了锁与信号量,这一节我们就可以实现键盘驱动了,访问键盘输入的数据也属于临界区资源,所以需要锁的存在。 一、键盘简介 之前的 ps/2 键盘使用的是中断驱动的,在当时,按下键盘就会触发中断&a…

Abaqus周期性边界代表体单元Random Sphere RVE 3D (Mesh)插件

插件介绍 Random Sphere RVE 3D (Mesh) - AbyssFish 插件可在Abaqus生成三维具备周期性边界条件(Periodic Boundary Conditions, PBC)的随机球体骨料及骨料-水泥界面过渡区(Interfacial Transition Zone, ITZ)模型。即采用周期性代表性体积单元法(Periodic Representative Vol…

1.8 python 模块 time、random、string、hashlib、os、re、json

ython之模块 一、模块的介绍 (1)python模块,是一个python文件,以一个.py文件,包含了python对象定义和pyhton语句 (2)python对象定义和python语句 (3)模块让你能够有逻辑地…

Cookie 与 Session

目录 一、获取Cookie/Session 1、理解Cookie 2、理解Session 3、Cookie 和 Session 的区别 4、获取Cookie 4.1 传统获取Cookie 4.2 简洁获取Cookie 5、Session 存储和获取 5.1 Session存储 5.2 Session读取 5.3 简洁获取 Session 一、获取Cookie/Session 1、理解Co…

【Linux】详解软硬链接

一、软硬链接的建立方法 1.1软链接的建立 假设在当前目录下有一个test.txt文件,要对其建立软链接,做法如下: ln就是link的意思,-s表示软链接,test.txt要建立软链接的文件名,后面跟上要建立的软链接文件名…

k8s1.28.8版本配置Alertmanager报警方式(邮件,企业微信)

文章目录 总结部署流程 Alertmanager 三大核心1. 分组告警2. 告警抑制3. 告警静默 报警过滤静默通知方案一:方案二: 抑制报警规则案例一 参考文档 自定义路由告警,分来自不同路由的告警,艾特不同的人员进行区分修改 alertmanager …

linux C:变量、运算符

linux C 文章目录 变量运算符 一、变量 [存储类型] 数据类型 标识符 值 标识符:由数字、字母、下划线组成的序列,不能以数字开头。 数据类型:基本数据类型构造类型 存储类型:auto static…

4月深圳振威新能源产业博览会丨千万订单采购对接会!

4月深圳振威新能源产业博览会丨千万订单采购对接会! 目前,振威新能源海外招商团队已成功与俄罗斯、泰国多家组织机构建立合作联系!已确定携多家知名企业到现场采购! 电池与储能 同时,振威新能源团队也成功与泰国储能技…

【KingSCADA】播放语音

1.函数介绍 PlaySound(string strWaveFileName, int nMode);下面是官方帮助文档中的解释: 2.生成语音文件 3.使用脚本播放音频文件 将音频文件存放在工程目录下面,我存放在了…\Resources\文件夹下: 我简单的写了一个定时1分钟播放一次语…

Docket常见的软件部署1

1 安装MySQL # 查看MySQL镜像 docker search mysql # 拉起镜像 docker pull mysql:5.7 # 创建MySQL数据映射卷,防止数据不丢失 mkdir -p /hmoe/tem/docker/mysql/data/ # 启动镜像 docker run -d --name mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306:3306 -v /home…

蓝桥杯第七届大学B组详解

目录 1.煤球数量; 2.生日蜡烛; 3.凑算式 4.方格填数 5.四平方和 6.交换瓶子 7.最大比例 1.煤球数量 题目解析:可以根据题目的意思,找到规律。 1 *- 1个 2 *** 3个 3 ****** 6个 4 ********** 10个 不难发现 第…

OSCP靶场--Internal

OSCP靶场–Internal 考点(CVE-2009-3103) 1.nmap扫描 ## ┌──(root㉿kali)-[~/Desktop] └─# nmap 192.168.216.40 -sV -sC -Pn --min-rate 2500 -p- Starting Nmap 7.92 ( https://nmap.org ) at 2024-03-31 07:00 EDT Nmap scan report for 192.168.216.40 Host is up…

C++11新特性(二):更好用的 lambda 表达式和 function 包装器

目录 lambda 表达式 基本格式及参数列表 对于 lambda 捕捉列表的说明 function 包装器 bind 包装器 lambda 表达式 C11引入了lambda表达式,它是一种用于创建匿名函数的语法。lambda表达式可以被视为一个匿名函数对象,它可以在需要函数对象的地方使用…

PyTorch 教程-快速上手指南

文章目录 PyTorch Quickstart1.处理数据2.创建模型3.优化模型参数4.保存模型5.加载模型 PyTorch 基础入门1.Tensors1.1初始化张量1.2张量的属性1.3张量运算1.3.1张量的索引和切片1.3.2张量的连接1.3.3算术运算1.3.4单元素张量转变为Python数值 1.4Tensor与NumPy的桥接1.4.1Tens…

系统慢查询的思考

系统慢查询的思考 在一个系统中发现慢查询的功能或很卡的现象。你是怎么思考的?从哪几个方面去思考?会用什么工具? 一个系统使用了几年后都可能会出现这样的问题。原因可能有以下几点。 数据量的增加。系统中平时的使用中数据量是有一个累…

【AXIS】AXI-Stream FIFO设计实现(四)——异步时钟

前文介绍了几种同步时钟情况下的AXI Stream FIFO实现方式,一般来说,FIFO也需要承担异步时钟域模块间数据传输的功能,本文介绍异步AXIS FIFO的实现方式。 如前文所说,AXI-Stream FIFO十分类似于FWFT异步FIFO,推荐参考前…

MIPI CSI-2 Low Level Protocol解读

一、Low Level Protocol介绍 LLP 是一种面向字节的基于数据包的协议,支持使用短数据包和长数据包格式传输任意数据。为简单起见,本节中的所有示例均为单通道配置。 LLP特性: 传输任意数据(与有效载荷无关) 8 位字大…

Chatgpt掘金之旅—有爱AI商业实战篇(二)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、前言: 成为一名商业作者是一个蕴含着无限可能的职业选择。在当下数字化的时代,作家们有着众多的平台可以展示和推广自己的作品。无论您是对写书、文…

MSPF5438数据卫星透传

最近在网上找了个项目来做,实现功能简单描述就是通过Lora模块E30-170T27D接收上位机发送的数据包,并对接收数据包进行正确性校验,若数据包校验成功则将其储存在W25Q125FV 中,待上位机发送数据包传输完毕指令后,单片机启…