MySQL---搜索引擎
MySQL的存储引擎是什么
MySQL当中数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧 锁定水平,以及最终提供的不同的功能和能力,这些就是我们说的存储引擎。
MySQL存储引擎的功能
1.MySQL将数据存储在文件系统中的一种格式和方式
2.存储引擎负责执行实际的数据I/O操作。
3.存储数据引擎介于数据和文件系统之间,数据会先保存到存储引擎,再按照存储引擎的格式保存到文件系统中
即:如何把数据保存到文件系统中
MySQL的存储引擎的分类
1.INNODB:5.5之后 MySQL的默认存储引擎。事务性速记引擎。支持ACID事务。支持行锁,锁表。写入和查询性能比较好。
2.MYISAM:5.5之前的默认存储引擎。插入数据性能较高,查询速度也很优秀。但不支持事务
3.memory引擎:所有数据都保存在内存的存储引擎,但是服务一旦重启,全部丢失。插入数据,更新,查询数据,速度比较快。但是占用内存空间比较大。会占用和数据量正比的内存空间
4.csv:由逗号分隔数据的存储引擎。他会在数据库子目录里为每一个数据表创建一个 .csv的文件。就是一个普通的文本文件。每个数据行占用一个文本行。但是 csv不支持索引。
5.Archive:非常适合存储大量的独立的,历史数据的引擎。不需要被经常读取。插入的速度很快。查询的效率比较低。
6.blackhole:黑洞引擎,写入的任何数据都会消失。
查看存储引擎
show engines\G;
纵向查看

1.命令行修改引擎
alter table hj engine=myisam;命令行修改
![]()
2.配置文件修改
vim /etc/my.cnf
配置文件修改

MYISAM和INNODB做个分析对比:
MYISAM:不支持事务,也不支持外键,只支持全文索引,数据文件和索引文件是分开的。
访问速度快
使用场景:查询和插入数据为主的应用。
在磁盘上有三个文件:
文件名和表名相同。但是扩展名不同:
.frm:存储表的结构
.MYD:数据文件
.MYI:索引文件的扩展名
MYISAM特点
1.更新数据时,整个表都会锁定。
2.数据库在读写过程中相互阻塞。
MYISAM支持的存储格式:
1.静态表,固定长度表,静态表myisam的默认存储格式。静态表中字段都是非可变字段。每个记录都是固定长度的。存储快,方便缓存,有了故障容易恢复。缺点是占用空间比较多。
2.动态表,可以包含可变字段,记录的长度是不固定的。优点是占用空间比较少。频繁更新数据,删除记录,会产生碎片。需要定期清理。myisamchk -r。出现故障恢复比较困难。
3.压缩表,myisamchk工具创建,占据空间非常小。每条记录都是单独压缩。
INNODB支持的存储格式:
1.支持事务,支持4个事务的隔离级别。5.5之后是mysql的默认存储引擎。
读写阻塞和隔离级别相关
支持高效的缓存索引以及缓存数据。
表于主键以簇方式存储BTREE。
支持外键约束,5.5之后INNODB也可以支持全文索引。
硬件资源的要求比较高。
支持行锁定,也可以支持表锁定(全表扫描)
1.使用like模糊查询,会进行全表扫描,锁定整个表
2.对没有创建索引的字段进行增,删,改,也会进行全表扫描,锁定整个表。
3.使用索引,进行增 删 改 ,则是行级锁定。
INNODB的特点
1.不保存表的行数,统计表的行数会扫描一遍整个表来计算有多少行。
2.自增长字段必须有索引,INNODB中必须包含只有该字段的索引
3.delete清空表,一行一行删,速度比较慢,推荐 truncate
适用场景:
1.业务需要事务的支持
2.论坛,微博,对数据一致性比较高的场景
3.访问量和并发比较高的场景,innodb支持缓存,减少后台服务器的压力。
三个文件:
表名 .frm (表结构文件)
表名 .idb(既是数据文件,又是索引名)
dp.opt:表的属性文件
INNODB行锁和索引的关系 以及表锁 排他锁 死锁
行锁演示
要对一个非索引键进行操作,当一个事务对非索引列进行操作,因为要全表扫描过滤,所有整张表都会锁定,另一个事务只能查。
create table test (
id int(4) PRIMARY KEY,
name varchar(10),
age varchar(3)
);
alter table test add index name_index (name);
show index from test;


此时 右侧的命令无法执行,只到命令行执行commit才可运行(时间15.9秒可以看出来commit执行之后才将行锁取消)
此时使用name,普通索引,会锁住索引行,紧接着对应的主键,一并锁定,就是把那一行锁住
commit即可
表锁演示
删除age=2(没有设置索引),事务B(右侧)所有为age的条件都无法更新数据,该表现为表锁

死锁演示
行锁如果使用不当会导致死锁(死锁一般是事务相互等待对方释放资源,最后形成环路造成的)
在终端执行
begin;
delete from test1 where id =4;
在外部
begin;
select * from test1 where id =5 for update;
再回到终端执行
delete from test1 where id =5;
| 事务A | 事务B |
| begin; | begin; |
| delete from test where name = 'a'; //事务结束前,name='a'的行锁定 | |
| select * from test where name = 'b' for update;//加排他锁,模拟并发,锁定name='a'; | |
| delete from test where name='b'; //死锁产生 | |
| update test set name='abc' where name='a'; #死锁产生。因为会话1中name='a'的行还在删除过程中,该行已被锁定 | |
| rollback;//回滚,事务结束 | |



1、 发生死锁的时候,数据库会自动选择一个事务作为受害者,然后先解除思索,再回滚事务。
2、 MySQL的默认的死锁机制,会选则一个事务作为思索的牺牲品。会直接终止其中一个事务,但是不会自动回滚。
如何仅可能避免死锁
1.业务逻辑要合理,以固定的顺序访问表和行
2.如果事务的类型比较复杂,要进行拆分,在业务允许的情况下,把大事务拆小
3.在同一事务中,尽可能一次性锁定所有需要的资源。可以减少需要的资源,可以减少死锁的概率
4.隔离级别,read commit 可以避免死锁
5.添加合理的索引,可以减少死锁的概率。
排他锁演示


相关文章:
MySQL---搜索引擎
MySQL的存储引擎是什么 MySQL当中数据用各种不同的技术存储在文件中,每一种技术都使用不同的存储机制,索引技巧 锁定水平,以及最终提供的不同的功能和能力,这些就是我们说的存储引擎。 MySQL存储引擎的功能 1.MySQL将数据存储在文…...
2022最新版-李宏毅机器学习深度学习课程-P32 Transformer
一、 seq2seq 1. 含义 输入一个序列,机器输出另一个序列,输出序列长度由机器决定。 文本翻译:文本至文本; 语音识别:语音至文本; 语音合成:文本至语音; 聊天机器人&#…...
如何使用商品详情API接口获取商品数据:一篇详尽的论述
一、引言 商品详情API接口是一种用于获取商品详细信息的应用程序接口。通过调用该接口,我们可以获取商品的名称、价格、描述、图片以及其他相关属性。对于电商平台、价格比较网站、数据分析等应用场景来说,商品详情API接口提供了便捷的数据获取方式。本…...
华为:手机王者归来,汽车起死回生
作为一家全球知名的科技公司,华为在通信、智能手机、平板电脑等领域拥有很高的市场份额和品牌影响力。而随着华为开始进军汽车领域,通过自主研发和合作,不断提升自己在汽车领域的竞争力,华为便也开始受到更为广泛的关注。 只不过…...
Vue3.0 provide与inject依赖注入:VCA
简介 provide 与 inject 是一种跨层级组件(祖孙)通信方式。当组件多层嵌套时,不需要将数据一层一层的向下传递,通过它俩可以实现跨层级组件通信。 provide:提供者 注入一个值,可以被后代组件接收。 prov…...
前端react入门day02-React中的事件绑定与组件
(创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 React中的事件绑定 React 基础事件绑定 使用事件对象参数 传递自定义参数 同时传递事件对象和自定义参…...
工业5G路由器;小体积 千兆高速通信组网
计讯物联工业路由器TR232,5G高速网络,超低时延、高可靠性,小体积、易安装、强兼容,串口/网口多设备接入联网,为用户提供高速稳定的数据传输通道 。 小体积5G工业路由器TR323,外形1047824mm࿰…...
【深度学习基础】从R-CNN到Fast R-CNN,再到MaskR-CNN,发展历程讲清楚!
📢:如果你也对机器人、人工智能感兴趣,看来我们志同道合✨ 📢:不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 📢:文章若有幸对你有帮助,可点赞 👍…...
面试算法51:节点值之和最大的路径
题目 在二叉树中将路径定义为顺着节点之间的连接从任意一个节点开始到达任意一个节点所经过的所有节点。路径中至少包含一个节点,不一定经过二叉树的根节点,也不一定经过叶节点。给定非空的一棵二叉树,请求出二叉树所有路径上节点值之和的最…...
阿里云 k8s 容器服务 设置节点为不可调度的两种方法有什么区别?
两种方法的区别在于:drain 会驱逐原来节点上的所有 pod,而 cordon 只是停止调度, 禁止新的 pod 调度进来,但旧的 pod 不会受影响。...
新一代数据质量平台datavines
在我实习的第一家公司的时候,有幸参与Apache Griffin的开发,也先后在一起其他公司使用过数据质量平台,同时也调研过一些开源的数据质量平台。 最近和朋友一起参与开发了datavines数据质量平台,随着在数据行业越呆越久,…...
建议收藏《2023华为海思实习笔试-数字芯片真题+解析》(附下载)
华为海思一直以来是从业者想要进入的热门公司。但是岗位就那么多,在面试的时候,很多同学因为准备不充分,与岗位失之交臂,无缘进入该公司。今天为大家带来《2023华为海思实习笔试-数字芯片真题解析》题目来源于众多网友对笔试的记录…...
【详细教程】关于如何使用GitGitHub的基本操作汇总GitHub的密钥配置 ->(个人学习记录笔记)
文章目录 1. Git使用篇1.1 下载安装Git1.2 使用Git 2. GitHub使用篇2.1 如何git与GitHub建立联系呢?2.2 配置公钥 1. Git使用篇 1.1 下载安装Git 点击 官网链接 后,进入Git官网,下载安装包 然后根据系统类型进行下载,一般为wind…...
HTML样式CSS、图像
HTML样式-CSS: CSS (Cascading Style Sheets) 用于渲染HTML元素标签的样式。CSS可以通过以下方式添加到HTML中:1)、内联方式:在HTML元素中使用“style”属性;2)、内部样式表:在HTML文档头部<head>区…...
智能电表瞬时电量是什么意思?
智能电表已经成为我们进行能源管理的重要工具。其中,瞬时电量这一概念逐渐走进大众视野。那么,智能电表瞬时电量究竟是什么意思?它对我们的生活和能源管理又有哪些影响呢?下面,小编就来为大家介绍一下瞬时电量…...
Redis之 redis.config配置文件
文章目录 前言一、基本配置1.单位2.包含3.网络配置4.通用5.快照6.安全7.限制8.仅追加模式 二、总体主要介绍总结 前言 行家一出手,就知有没有,让一起学习redis.config配置文件。 一、基本配置 Redis 的配置文件位于 Redis 安装目录下,文件名…...
BIOS开发笔记 - CMOS
CMOS原来指的是一种生产电子电路的工艺,在PC上一般指的是RTC电路单元,因为早期它是由这种工艺生产出来的,所以又把RTC称作了CMOS。 RTC(Real Time Clock)即实时时钟,用于保存记录时间和日期,也可以用来做定时开机功能。RTC靠一组独立的电源给它供电,这样设计的目的就是…...
leetcode_117 填充每个节点的下一个右侧节点指针 II
文章目录 1. 题意2. 题解2.1 BFS2.2 BFS空间优化2.3 DFS序层次记录 3. Ref 1. 题意 在一颗树的同层之间用指针把他们链接起来。 填充每个节点的下一个右侧节点指针 II 2. 题解 2.1 BFS 用一个变量记录下同层最右侧的节点,当遍历到时更新下一层的最右侧节点即可…...
亲测 IDEA Pycharm 全家桶 自动重置免费30天
理论上是通用的 插件市场安装 添加第三方插件仓库地址 在Settings/Preferences... -> Plugins 内手动添加第三方插件仓库地址:https://plugins.zhile.io 搜索:IDE Eval Reset插件进行安装。如果搜索不到请注意是否做好了上一步?网络是否…...
Marp: 将 Markdown 变为 PPT 式样的 VScode 插件
样例代码: --- marp: true size: 16:9 theme: default header: footer: --- <!-- _footer: Jia ming<br>Gansu University of Political Science and Law --> <!-- _backgroundColor: lightskyblue --> ## <!-- fit --> 笔记检验概述>…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...
