5分钟搞懂MySQL存储引擎

news2024/11/15 10:38:29

文章目录

  • 什么是存储引擎👋?
  • 指定存储引擎✅
    • 查看mysql提供什么存储引擎
    • 查看mysql当前默认的存储引擎
    • 修改mysql默认的存储引擎
    • 设置表的存储引擎
  • 常用存储引擎🧰
    • InnoDB
    • MyISAM
    • Memory
    • InnoDB 和 MyISAM的区别

什么是存储引擎👋?

在学习存储引擎之前,我们需要了解存储引擎在MySQL数据库服务器中所占的地位和作用!
在这里插入图片描述
首先系统地介绍一下MySQL数据库服务器的体系结构:

  • 首先第一层:连接层。 它的作用是:接收客户端连接,完成连接的处理,认证授权,安全方案,检查是否超过最大连接数…… 其中认证授权就是我们在使用用户名和密码登陆的时候的过程,并赋予该用户对应的权限

  • 再就是第二层:服务层。 核心功能基本上都在这一层完成:SQL接口、解析器、查询优化器、缓存,像创建存储过程、视图、触发器这些都在服务层完成

  • 第三层:引擎层。 真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作。上图中一个个紫色的圆筒就是不同种类的存储引擎,其中第一个就是我们常用的innodb,上图中是MySQL提供给我们的存储引擎,而我们自己也可以对存储引擎进行扩展 它被称为:可插拔式存储引擎,类似于接口,我们需要就把它插上来,不需要就把它拔掉。存储引擎控制的是我们的数据存储和拿取的方式

  • 最后一层:存储层。 引擎层只是决定了我们如何去存取数据,而数据实际上是存储在磁盘中的,同时,数据库的日志也会存储在磁盘当中

说了这么多,但是什么是存储引擎呢?

  • 存储引擎就是存储数据、处理和保护数据等技术的实现方式。(在物理上如何表示记录,怎么从表中读取数据,以及怎么把数据写入具体的物理存储器上,都是存储引擎负责的事情)

指定存储引擎✅

查看mysql提供什么存储引擎

show engines;
# 或者
show engines \G;

在这里插入图片描述

查看mysql当前默认的存储引擎

show variables like '%storage_engine%';
# 或者
SELECT @@default_storage_engine;

在这里插入图片描述

修改mysql默认的存储引擎

SET DEFAULT_STORAGE_ENGINE=MyISAM;
# 或者修改 my.cnf 文件并且重启mysql
default-storage-engine=MyISAM # 重启服务 systemctl restart mysqld.service

在这里插入图片描述

设置表的存储引擎

存储引擎是基于表的,也就是说一张表使用一个 存储引擎,数据库中的不同表的存储引擎不一定相同,存储引擎因此可以被称为表类型。

创建表时可以通过ENGINE来指定存储引擎,在create语句最后加上ENGINE = 存储引擎名称即可。如果建表语句中没有指定表的存储引擎,那就会使用默认的存储引擎 。

CREATE TABLE 表名( 
  	建表语句; 
) ENGINE = 存储引擎名称;

在这里插入图片描述
如果表已经建好了,我们也可以使用下边这个语句来修改表的存储引擎:

ALTER TABLE 表名 ENGINE = 存储引擎名称;

在这里插入图片描述
我们通过查看表结构发现存储引擎已被修改。

常用存储引擎🧰

InnoDB和MyISAM是MySQL中比较常用的两个存储引擎,MySQL 在 5.5 之前版本默认存储引擎是 MyISAM,5.5 之后版本默认存储引擎是 InnoDB,MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及涉及到安全性较高的应用。

  • 如果业务需要高度的数据完整性和事物支持,那么InnoDB是更好的选择。所以频繁修改以及数据安全性的情况适合;
  • 如果业务主要是读取操作,或者需要高校的全文搜索功能,那么MyISAM 可能更适合。所以查询频繁的适合。

InnoDB

具备外键支持功能的事务存储引擎 ,MySQL从3.23.34a开始就包含InnoDB存储引擎。 大于等于5.5之后,默认采用InnoDB引擎 。 InnoDB是MySQL的 默认事务型引擎 ,它被设计用来处理大量的短期(short-lived)事务。可以确保事务的完整提交(Commit)和回滚(Rollback)。

它的特点可以用数据库中查询出来的COMMENT中的三点来概括:

  • Supports transactions:支持事务。在使用InnoDB作为存储引擎的时候,进行DML操作的时候遵循ACID模型,支持事务

    • DML:对于数据的增删改操作

    • ACID:原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durablility)

  • row-level locking:行级别锁。提高并发访问的性能。

  • foreign keys:支持外键约束,保证数据的完整性和正确性

除此之外还需要谈谈其数据文件结构

  • 它存储数据库文件的类型为xxx.ibd,其中xxx表示表名,也就是说每一个使用InnoDB存储引擎的表都会对应一个ibd文件,存储该表的表结构(frm,sdi)、数据和索引。
    • 其中表结构文件,早期的时候有一个文件叫frm,表结构都存储在这个里面,但是后来在MySQL8.0,以后,表结构都存储在了sdi文件中,而sdi又融入到了ibd文件中。

不妨去看看寻找一下ibd文件吧,该文件是二进制编码,我们无法直接打开,可以通过命令ibd2sdi,从ibd文件中提取sdi的表结构数据。
在这里插入图片描述

其他, 查看创建表的存储路径

show variables like 'datadir'

终端输入回车,然后输入密码即可

sudo chmod -R a+rwx /usr/local/mysql/data

MyISAM

主要的非事务处理存储引擎,5.5之前默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,说它的特点我们可以与现在的默认存储引擎InnoDB进行对比

  • MyISAM 不支持事务,也不支持外键
  • MyISAM 不支持行锁,但是支持表锁
  • 由于不保证它的事务,因此它的访问速度更快

而MyISAM涉及到的存储文件的类型有三种:MYD,MYI,SDI

  • xxx.sdi 用于存储表结构
  • xxx.MYD 用于存储数据 (MYData)
  • xxx.MYI 用于存储索引 (MYIndex)

在这里插入图片描述

Memory

Memory内存,它的表数据是存储在内存中的,响应速度很快 ,但容易受宕机、断电……的影响,导致数据丢失。另外,要求存储的数据是数据长度不变的格式,比如,Blob和Text类型的数据不可用(长度不固定的)。 一般 MEMORY 存储引擎用于临时表和缓存。它的特点由于和前面两种存储引擎类型不同,所以不做比较

  • Memory同时 支持哈希(HASH)索引 和 B+树索引
  • 它由于是内存存放,因此访问速度很快
  • MEMORY 表的大小是受到限制 的。表的大小主要取决于两个参数,分别是 max_rows 和 max_heap_table_size 。其中,max_rows可以在创建表时指定;max_heap_table_size的大小默认为16MB,可以按需要进行扩大。

MEMORY数据是存储在内存中,故只需要sdi文件去记录表结构即可
在这里插入图片描述

InnoDB 和 MyISAM的区别

两者主要有以下区别

  1. InnoDB 支持事务,MyISAM不支持;
  2. InnoDB 主键是聚集索引,而MyISAM 是非聚集索引;(InnoDB中索引和数据在一起,MyISAM采用了一种索引和数据分离的存储方式)
  3. InnoDB 支持外键,MyISAM不支持;
  4. InnoDB 最小锁粒度的行锁,MyISAM 最小锁粒度是表锁;
  5. InnoDB在mysql5.6版本之前不支持全文索引;(innodb 从1.2.x 开始才增加了全文索引支持。而MySQL5.6版本中innodb的版本才升级到 1.2.x。)
  6. InnoDB中不保存表的行数,但MyISAM中有保存表的行数;
  7. 对于自增长的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中可以和其他字段一起建立联合索引;
  8. 清空整个表时,InnoDB是一行一行的删除,效率非常慢。而MyISAM则会重建表

在这里插入图片描述

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

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

相关文章

23万条数据集,可以用来区分钓鱼网站!

文章目录 一、何为钓鱼网站?二、数据集介绍引用数据集数据展示字段解释 三、数据分析数据读取使用ucimlrepo读取数据 四、下载地址 一、何为钓鱼网站? 在数字化时代,网络安全问题日益严重,其中钓鱼网站是一种常见的网络威胁。钓鱼…

基于Java (spring-boot)的进销存管理系统

一、项目介绍 首页,基础信息管理,备忘录,进销管理,仓库管理,系统管理 二、作品包含 三、项目技术 后端语言:Java 项目架构:B/S架构 数据库:MySQL 前端技术:Vue 后端技术&…

【C语言】比较两个字符串大小,strcmp函数

目录 一,strcmp函数 1,strcmp函数 2,函数头文件: 3,函数原型: 4,返回取值: 二,代码实现 三,小结 一,strcmp函数 1,strcmp函数 …

信道模拟器广泛应用于通信产业 我国企业竞争力不断提高

信道模拟器广泛应用于通信产业 我国企业竞争力不断提高 信道模拟器,模拟通信信道受环境因素影响产生各种特征的仪器,主要由接收电路、发射电路、模拟器、主控CPU等组成,可用于外场环境或者实验室环境中。 根据新思界产业研究中心发布的《202…

线性代数 --- 特征值与特征向量(下)

特征值与特征向量 Eigen Values & Eigen Vectors Part III:如何求解特征向量与特征值 The Key Equation 对于一般矩阵A,如何找到他的特征值与特征向量? Step I: Find λ first! 首先,我们有方程: 但这里有两个未知数&…

短视频解析接口分发系统

宝塔面板:Nginx系统 php7.2 Mysql 5.6-5.7 伪静态Thinkphp 上传文件直接访问域名安装即可 可以自备 听说后边要出saas去水印小程序 下载地址:https://pan.xunlei.com/s/VNskSEelfRVIzoSm5P5Rcw34A1?pwdqzhh# 接口演示: 前端演示…

前端入职配置新电脑!!!

前端岗位入职第一天到底应该做些什么呢?又该怎样高效的认识、融入团队?并快速进入工作状态呢?这篇文章就来分享一下,希望对即将走向或初入前端职场的你,能够有所帮助。内含大量链接,欢迎点赞收藏&#xff0…

GPU性能测试中的张量和矩阵运算

正文共:888 字 7 图,预估阅读时间:1 分钟 前面我们使用PyTorch将Tesla M4跑起来之后(成了!Tesla M4Windows 10AnacondaCUDA 11.8cuDNNPython 3.11),一直有个问题,那就是显存容量的问…

Springboot的配置文件及其优先级

配置文件 内置配置文件 配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;SpringBoot使用一个全局的配置文件,配置文件名是固定的: application.propertiesapplication.yml 以上…

javaweb篇请求与相应的参数问题

目录 前言 简单传参设置 get请求无法识别 post请求 简单传参问题无法识别的解决问题 注意事项 改法 实体参数 代码展示 今日分享 前言 友友们,大家好,今天来开荒了,今天介绍的是在进行数据请求以及相应的时候,我们不仅仅只是进入一…

Java SE 抽象类与接口(二):接口(下)

2.5 实现多个接口 在Java语言中,类和类之间是单继承关系,一个类只可以有一个父类,即Java中不支持多继承关系,但是一个类可以实现多个接口,下面通过Animal类来具体说明 class Animal {protected String name;public A…

phpcms上传漏洞

原始漏洞 漏洞原理:我们上传一个zip的压缩包,它会解压然后删除其中不是.jpg .gig .png的文件 function check_dir($dir):这是一个PHP函数的定义,它接受一个参数 $dir,代表要检查的目录路径。 $handle opendir($dir)…

MySQL学习Day32——数据库备份与恢复

在任何数据库环境中,总会有不确定的意外情况发生,比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的,这些情况可能会导致数据的丢失、 服务器瘫痪等严重的后果。存在多个服务器时,会出现主从服…

C语言程序环境和预处理Pt.1 - 预处理指令|预处理操作符

电脑所能识别的语言为二进制指令,而我们所写的C语言代码是文本信息。为了能使计算机识别并执行C语言代码,就需要翻译环境,使C语言代码翻译为二进制的指令。 1.按下编译按钮的幕后 - 程序的翻译环境 从C语言源代码到计算机可识别的二进制文件…

【前端】 响应式布局

目录 1.媒体查询 2.BootStrap 2.1BootStrap引入 2.2BootStrap栅格系统 2.3BootStrap手册查询 1.媒体查询 响应式布局:显示区域改变,布局随之改变,即同一套代码适配不同大小的显示器 媒体查询:检测视口宽度,设置差…

案例分析篇12:可靠性设计考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

信号与系统学习笔记——信号的分类

目录 一、确定与随机 二、连续与离散 三、周期与非周期 判断是否为周期函数 离散信号的周期 结论 四、能量与功率 定义 结论 五、因果与反因果 六、阶跃函数 定义 性质 七、冲激函数 定义 重要关系 作用 一、确定与随机 确定信号:可以确定时间函数…

【AIGC】重磅消息,GPT-4.5 Turbo将在6月发布?

2024 年 AI 辅助研发趋势 文章目录 强烈推荐GPT-4.5 Turbo竞争对手Anthropic的Claude 3谷歌的Gemini 1.5 Pro 总结强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…

酷开系统走在前列,品牌重启增长,酷开科技成为品牌商合作目标

区别于火热的移动端,手机屏作为私密屏,往往面向的是用户个体,而电视作为家庭连接的重要枢纽,不仅仅定位于公共屏,同时也面向客厅场景发挥着其大屏传播的作用,这里不仅牵扯到大屏营销,也关联着大…

低代码开发平台,快速搭建开源MES系统

MS低代码云MES作为一家专注于提供生产制造数字化方案的服务商,“以客户为中心”、以“数据驱动、智能化、互联化”为企业的核心标签,以低代码平台为切入点,帮助企业构建以人为本的未来供应链生态系统,实现制造企业的智能化转型。 …