【MySQL数据库 | 第十六篇】存储引擎

news2024/11/26 14:42:00

目录

 前言:

 MySQL体系结构图:

存储引擎简介:

1. InnoDB存储引擎:

2. MyISAM存储引擎:

3. MEMORY存储引擎:

4. NDB Cluster存储引擎:

5. ARCHIVE存储引擎:

存储引擎语法:

ACID与行级锁:

 总结:


 前言:

经过前面15篇的学习,我们已经学完了SQL的基本语法内容,大致掌握了数据库的操作,而接下来我们将进行SQL的进阶学习,今天我们要学习的内容为:MySQL的存储引擎。

 MySQL体系结构图:

MySQL的结构体系主要包含以下几个方面的内容:

1. 服务器层(Server Layer):提供了MySQL的核心服务,包括连接管理、查询解析、优化等功能。

2. 存储引擎(Storage Engine):提供了数据的存储和访问服务。MySQL自身支持多种存储引擎,如InnoDB、MyISAM等,每种存储引擎都有自己特有的特点和功能。

3. 网络层(Connection Layer):提供了MySQL与客户端之间的通讯服务,支持多种协议,如TCP/IP、HTTP等。

4. 应用编程接口(Application Programming Interfaces,APIs):提供了多种编程接口,包括C、C++、Python等接口,以方便应用程序与MySQL进行交互操作。

MySQL的整个体系结构主要是由这几个部分组成的,其中服务器层和存储引擎层是MySQL核心的组成部分,分别负责提供核心服务和数据的存储和访问服务。网络层和应用编程接口层则提供了与客户端和应用程序之间交互操作的相关服务。这些组成部分配合使用,构成了MySQL强大、灵活的系统结构。

InnoDB是MySQL5.5版本后的默认使用存储引擎。

存储引擎简介:

存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也被称为是表结构。

MySQL中的存储引擎是处理数据存储和检索方面的核心组件。MySQL支持多种不同的存储引擎,这些存储引擎在某些方面有着自己的独特优势。

常见的MySQL存储引擎包括以下几种:

1. InnoDB存储引擎:

InnoDB存储引擎是MySQL中最常用的一个存储引擎,也是默认的存储引擎。它支持ACID事务,具有行级锁定和外键约束等特性,适合于应用于事务性和高并发的应用程序。InnoDB支持数据的热备份和恢复,并提供了高效的缓存机制。

2. MyISAM存储引擎:

MyISAM不支持事务,并且对于更新操作会锁定整个表,但是在插入和查询方面性能非常好。对于只读应用、或者单线程的应用,使用MyISAM可以获得更好的性能。MyISAM表的特点是表锁定,速度快,但是不支持事务,也不支持外键等约束。

3. MEMORY存储引擎:

MEMORY存储引擎是将表数据存储在内存中,适用于一些处理销售、环境监测等数据的场景。MEMORY是一个非常快速的存储引擎,但是它的缺点是,当服务器关闭进程或者崩溃时,表数据就被清空了。MEMORY还支持Hash索引,这极大的提高了查询效率。

4. NDB Cluster存储引擎:

NDB Cluster可以将一个数据库拆分成多个节点,每个节点都维护一个数据子集,并协同工作以支持完整的数据库操作。这种存储引擎用于大规模、高可用性的数据中心

5. ARCHIVE存储引擎:

ARCHIVE存储引擎是一种仅用于存档目的的存储引擎,适用于一些数据日志、快照备份等场景。它旨在提供一个非常低的磁盘空间消耗和一个高性能的压缩和解压缩能力,不支持索引、更新和删除操作,常用于写入数据后压缩存档。 

不同的存储引擎在性能、特性、使用场景等方面各不相同,开发者在使用MySQL时需要根据需求选择合适的存储引擎。

存储引擎语法:

1.查询当前表的引擎:

show create  table 表名;

运行结果:

 2.在创建表的时候指定存储引擎:

create table name(
    字段1 字段类型
    ....
    字段2 字段类型
) ENGINE = 引擎类型;

 实例:

create table try(
    id int
) engine = MyISAM;

运行结果:

3.查询当前数据库支持的引擎类型:

show engines ;

运行结果:

ACID与行级锁:

ACID

     是一个表示事务处理基本原则的缩写,包括以下四个方面:

  1. 原子性(Atomicity):一个事务被视为一个原子操作,它将所有的任务都视为一个整体(如果其中有一部分操作失败,整个事务就会被回滚),要么全部完成,要么全部不完成。

  2. 一致性(Consistency):在事务开始之前和事务结束之后,数据库的状态必须保持一致,这意味着事务执行中间不能破坏数据库的完整性约束。

  3. 隔离性(Isolation):隔离性指在数据库执行多个事务时,每个事务都应该是完全独立的,执行它们的顺序不应该影响结果。

  4. 持久性(Durability):持久性是指在事务完成之后,其产生的结果必须永久保存在数据库中,即使出现了硬件故障或其他系统故障,也不能影响已提交的事务结果。

行级锁:  

      行级锁(Row-Level Lock)是数据库管理系统(DBMS)中的一种锁机制,在处理并发读写时,对每一行数据进行锁定,以保证同时读写的数据不会冲突。与传统的表级锁(Table-Level Lock)不同,行级锁可以在只对某一行进行加锁的情况下,并发地处理多个事务,从而提高数据处理的效率。

       行级锁的工作原理是:在对一行数据进行修改/删除操作之前,向该行添加一个锁定标记,直到事务完成或在commit/rollback之后才释放这行锁定标记。

       行级锁的主要优点包括:

      1. 提高了并发性:行级锁可以锁定单独的行而不是整个表,这意味着在并发访问时可以更加高效的实现读和写的操作。

      2. 减少了锁定冲突:使用行级锁可以减少锁定并发访问带来的冲突,避免了串行化操作,从而提高了执行效率。

     3. 支持更高的事务处理能力:通过优化锁机制,行级锁降低了锁等待时间和锁竞争的频率,从而支持更高的事务处理能力。

     需要注意的是,行级锁在使用时需要控制两个方面的问题:锁定粒度和锁定时间。锁的粒度太细,可能会导致锁定的数据量过大,导致锁竞争的开销过大;锁的时间过长,又可能会影响并发读写性能。因此在使用行级锁时,需要权衡粒度和时间两个方面的因素,并根据实际应用需求进行适当调整。

 总结:

        存储引擎就是存储数据,建立索引,更新/查询数据等技术的实现方式。 我们根据不同的需求来选择不同的引擎来处理表数据,可以使得效率大大提高。

今天的内容到这里就结束了,感谢大家的阅读。

如果我的内容对你有帮助,请点赞,评论,收藏创作不易,大家的支持就是我坚持下去的动力!

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

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

相关文章

chatgpt赋能python:Python再次运行快捷键介绍及使用技巧

Python再次运行快捷键介绍及使用技巧 如果你是一名经验丰富的Python工程师,你一定知道如何使用Python快捷键加速代码调试和开发。然而,在实际开发中有许多情况下,你需要再次运行刚刚输入的代码块或函数,这个时候,你必…

JavaWeb开发聊天功能 聊天信息如何实现自动将其他消息上移 最新消息出现在界面下方

问题 JavaWeb开发聊天功能 聊天信息如何实现自动将其他消息上移 最新消息出现在界面下方 详细问题 笔者基于开发JavaWeb开发聊天功能,当用户处于聊天室中,若用户发送一条信息或用户接收到聊天对象的信息,若要查看信息,需要下滑…

Storm超实用教程详解-附示例

一、理论基础 Storm 是一个免费并开源的分布式实时计算系统。利用 Storm 可以很容易做到可靠地处理无限的 数据流,像 Hadoop 批量处理大数据一样,Storm 可以实时处理数据。在Storm中,topology的构建是一个有向无环图。结点就是Spout或者Bolt&…

CKA 04_部署 harbor 仓库 containerd 连接 harbor 仓库 kubeadm 引导集群

文章目录 1. 清空之前的策略1.1 kubeadm 重置1.2 刷新 IPtables 表 2. 查看 Kubernetes 集群使用的镜像3. 搭建 harbor 仓库3.1 部署 docker3.1.1 准备镜像源3.1.2 安装 docker3.1.3 开机自启 docker3.1.4 修改内核参数,打开桥接3.1.5 验证生效 3.2 准备 harbor 仓库…

chatgpt赋能python:Python如何写网站的SEO

Python如何写网站的SEO 在当今的数字时代,网站是公司或个人吸引更多目标受众和客户的重要媒介之一。然而,拥有优秀内容和设计不足以保证流量。搜寻引擎优化(SEO)是一项重要的工作,它帮助网站排名更高,被更多人看到。Python是一种…

chatgpt赋能python:Python技术分享:如何再建立一个文档的SEO

Python技术分享:如何再建立一个文档的SEO Python作为一种高级编程语言,被业内大量使用。它的易用性、跨平台性、语法简单易懂、代码可读性高等特性进一步增强了它的流行度。在使用Python编程时,经常会需要生成文档,使得我们的项目…

软考A计划-系统架构师-官方考试指定教程-(12/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…

chatgpt赋能python:Python如何免费群发短信

Python如何免费群发短信 在数字化时代,短信成为了快速高效的沟通方式之一。针对群发短信需求,市场上存在着多种短信群发软件,而Python作为一个强大的编程工具,也可以轻松实现免费的短信群发功能。本篇文章将为大家介绍如何通过Py…

从QGIS图层中裁剪需要的区域

GiS数据裁切,创建一个临时图层,通过矢量裁切的方法,将Gis图层进行裁切;影像裁切,将影像图层放置在Gis中,截取影像图以及临时图层的轮廓,放入PS中进行对比,然后将影像图裁切下来。 1…

软件测试01:软件及分类和缺陷的定义

软件测试:软件及分类和缺陷的定义 软件 程序数据文档 软件分类 层次分类 系统软件应用软件组织分类 商业软件开源软件结构分类 单机软件分布式软件(两种:BS服务端架构模型和CS客户端架构模型) 软件缺陷 软件缺陷的由来 起源于上世纪70年代中期 《测…

javaScript蓝桥杯---新增地址

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 网购大家应该再熟悉不过,网购中有个很难让人忽略的功能就是地址管理,接下来就让我们通过完善代码来探索下地址管理中常用功能的实现吧~ 本题需要在已提供的基础项目中使用 JS 知识…

chatgpt赋能python:Python输入:优秀的函数、方法和技巧

Python输入:优秀的函数、方法和技巧 引言 从文件读取数据,在终端上接收用户输入,在Web应用程序中处理表单数据,这些都是Python中经常需要进行的一些任务。Python内置了许多函数和方法来处理这些任务,但是从众多的选项…

CSS 谈谈你对重排和重绘的理解

一、前言 当我们给我们的DOM结构改变或者给DOM结构设置样式时,会触发回流和重绘,但不同的样式改变,是否触发重排和重绘是不确定的。我们有必要深度理解重排和重绘,通过减少重排可以提高性能。 了解浏览器的解析渲染机制: (1).解析…

C++中的数组理解与应用

数组的数据结构 数组是最基本的数据结构,关于数组的面试题也屡见不鲜,本文罗列了一些常见的面试题,仅供参考。目前有以下18道题目。 数组求和 求数组的最大值和最小值 求数组的最大值和次大值 求数组中出现次数超过一半的元素 求数组中元…

详解c++---二叉搜索树的讲解和模拟实现

目录标题 二分查找的优缺点搜索二叉树的规则搜索二叉树的特性二叉搜索树的性能分析准备工作二叉搜索树的插入函数二叉搜索树的打印函数二叉搜索树的查找函数二叉搜索树的删除函数拷贝构造函数赋值重载析构函数递归版本的find函数递归版本的插入递归的删除方法搜索树的应用模型 …

burpsuite+xray实现联动测试(手动分析和自动化测试同时进行)

目的:安全测试过程中手动分析测试与xray自动化扫描测试结合,这样可以从多层保障安全测试的分析,针对平台业务接口量大的安全测试是十分有用的,可以实现双向测试同时开始。 xray简介 xray 是一款功能强大的安全评估工具&#xff…

MySQL数据库基础 05

第五章 排序与分页 1. 排序数据1.1 排序规则1.2 单列排序1.3 多列排序 2. 分页2.1 背景2.2 实现规则2.3 拓展 1. 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序DESC(descend):降序 ORDER BY 子句在SELECT语句…

chatgpt赋能python:Python如何避免代码重复

Python如何避免代码重复 作为一名有10年Python编程经验的工程师,我深知代码重复会降低程序的可维护性,使代码变得混乱和难以扩展。因此,我想在这篇文章中介绍一些技术和最佳实践来避免Python代码重复。 为什么要避免重复代码? …

idea插件开发-Library

库是模块所依赖的已编译代码(例如 JAR 文件)的存档。IntelliJ 平台支持三种类型的库:1、Module Library:库类只在本模块可见,库信息记录在模块.iml文件中。2、Project Library:库类在项目中可见&#xff0c…

Scrapy框架 增量式、分布式爬虫

文章目录 Scrapy框架1.增量爬虫2.分布式爬虫 Scrapy框架 1.增量爬虫 实现思路 利用redis集合数据类型 1.获取到url后进行判断 是否重复??? 2.第一次爬取到数据,爬取完成写入该记录... (两个点: 必须要没有爬过的数据…