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 --> 笔记检验概述>…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
