简单理解MySQL的存储引擎

article/2025/9/13 16:36:50

1、什么是存储引擎?

在说明存储引擎之前,首先你需要简单了解MqSQL的整体架构。
在这里插入图片描述
从上图可知,存储引擎位于整体架构的最底层。

存储引擎真正负责了MySQL中数据的存储和提取

可以这样理解:
其实我们平时写的各种SQL语句相当于指令,存储引擎只有接受了指令才会进行相应的各种操作。

2、MySQL存储引擎有什么特点?

(1)可插拔式存储引擎。

这也是MySQL与众不同的一点,插件式的存储引擎可以帮助MySQL在不同的业务场景下可以选择合适的存储引擎。

(2)存储引擎是基于表的。

注意这一点,存储引擎是基于表的,而不是库。

3、主要的存储引擎主要分为哪几类?

InnoDB、MyISAM、Memory

4、上述三种引擎各自的特点?

(1)InnoDB特点?

(a)DML操作遵循CAID模型,并且支持事务
(b)行级锁,提高并发访问性能
(c)支持外键FOREIGN KEY约束,保证数据的完整性和正确性。
(d)目前MySQL的默认的表存储引擎
(e)适合对于数据一致性、完整性、更新、删除操作比较频繁的数据表。

(2)MyISAM特点?

(a)不支持事务,不支持外键
(b)支持表锁,不支持行锁
(c)访问速度快
(e)适合查询和插入操作频繁的数据表

(3)Memory特点?

(a)内存存放,默认哈希索引
(b)用于memory存储的引擎的表数据是存储到内存中的,容易受到硬件问题(比如内存占用负载)或者是断电问题的影响,只能将这些表作为临时表或者缓存进行使用。
(c)虽然访问速度很快,但是太大的表无法缓存在内存中,而且无法保证数据的安全性。

在这里插入图片描述

5、什么是行锁?什么是表锁?行锁和表锁的区别和联系?

行级锁首先是通过索引进行加载的,因此行锁实现的前提是必须在有索引的基础上,要是对应的SQL语句没有走索引,则会走全表搜索,那么行锁也不会被触发,进而从行锁升级到表锁。
故行锁不是锁掉某一行记录,而是锁掉索引,这一点尤为重要。

对于行级锁,主要分为以下三类:

(1)记录锁:即对某一条记录加锁
(2)间隙锁:对某个范围加锁(但是不包含范围的临界数据)防止其他事物插入间隙,引发幻读现象。
(3)临键锁:由记录锁和间隙锁组成,既包含记录本身又包含范围,左开有闭区间。

InnoDB实现了两种类型的行锁:

(1)共享锁(S):允许一个事物去读一行,组织其他事务获得相同数据集的排它锁。

简单来说:共享锁之间是兼容的,共享锁与排它锁之间则是互斥的。

(2)排它锁(X):允许获取排它锁的事务更新数据,组织其他事物获得相同数据集的共享锁和排它锁。

简单来说:如果一个事务获取到了某一行数据的排它锁,则其他事务则不能获取到这一行数据的共享锁和排它锁了。
在这里插入图片描述

大家具体可以参考这一篇博客:
https://blog.csdn.net/qq_36261130/article/details/125552348

表锁:

顾名思义,就是在每次操作的时候锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。
对于表锁主要分为两类:
(1)表共享读锁:
在这里插入图片描述解释:读锁不会阻止其他客户端的读,但是会阻塞所有的写操作(包括自身的写操作)。

(2)表独占写锁:
在这里插入图片描述
解释:写锁则不仅阻塞其他客户端的读,又会阻塞其他客户端的写,不会阻塞自身客户端的读操作和写操作。

意向锁:

主要原因:为了避免在DML执行过程中行锁和表锁的冲突。
大家可以想一下:如果我们事务一堆该表的某一行数据(索引)添加了行锁,那么如果事务二相对这张表添加表锁时,会先检查当前表中是否有对应的行锁,如果没有,则会添加表锁,那么这个检查则是从头到尾的一次检查,这样其实效率大大降低。而这个时候如果有了意向锁就不一样了,事务一在对涉及的行除了加行锁之外,也会对该表加上意向锁,事务二则直接根据意向锁来判定是否可以加表锁,这样就避免了逐行判断的情况了,大大提升了效率!!!


http://chatgpt.dhexx.cn/article/LMmpkItk.shtml

相关文章

iOS隐私新规如何破局?盗版SKAdnetwork可行吗?

背景:   在2020年的开发者大会上,苹果宣布iOS14设备将会在App首次打开时主动弹窗请求是否选择允许广告追踪,即被获取设备的IDFA。这也就意味着新系统需要用户手动选择允许,而旧系统是手动选择关闭,这一关键改变无异…

牛腩新闻发布--过程或函数 'news_selectByCaId' 需要参数 '@caid',但未提供该参数(一)

发现问题 今天敲击牛腩,在敲击Web页面的List.aspx之后,点击Ctrl+F5运行,发现运行不了,首先是数据库中调取数据有问题,因为这个数据是用存储过程调取的,所以需要修改存储过程,这时候只需要改成如下代码就行: 将这个更改完之后就可以在数据库中调取到应需要的数据了,但是…

【牛腩】DELETE 语句与 REFERENCE 约束“FK_news_category“冲突。该冲突发生于数据库“newssystem“,表“dbo.news“, column ‘caId‘

【前言】 牛腩中删除类别的时候会提示受到主外键的约束,导致无法删除这个类别。 【问题描述】 DELETE 语句与 REFERENCE 约束"FK_news_category"冲突。该冲突发生于数据库"newssystem",表"dbo.news", column ‘caId’。…

【牛腩】过程或函数 ‘news_selectByCaId‘ 需要参数 ‘@caid‘,但未提供该参数

【前言】 在运行牛腩的时候会有提示过程或者函数缺少参数。这个是因为存储过程中写的缺少参数,添加相应的参数就可以了。 【问题描述】 过程或函数 ‘news_selectByCaId’ 需要参数 ‘caid’,但未提供该参数 过程或函数 ‘news_selectByContent’ 需要…

关于IDFA、CAID和「5. 1.2 - Data use sharing」

今天,2021年3月18日,突然收到了之前从未遇到过的拒审邮件,邮件原文如下: 发件人 Apple 5. 1.2 - Data use & sharing Please review this information carefully as it impacts your app’s availability on the App Store a…

中国广告协会的CAID方案

前些时间看到一个消息,腾讯、百度和字节跳动测试工具绕开苹果的ATT(AppTrackingTransparency,简称 ATT,旨在保护用户隐私的应用追踪透明度框架),估计这个应该是在测试CAID。 过一两天又出现一个消息&#x…

微信H5链接包装

最近看到好多人问一个问题,就是在微信中发游戏链接给好友,让链接显示成一个抖音的样式,如下: 这种链接包装,做起来说难不难,说简单也不简单。网上很多服务商都可以做,不过靠谱程度就参差不齐了…

微信内 H5 页面自定义分享

起源: 最近公司在做一个活动的h5页面,在微信内打开时需要进行微信授权,然后后端会重定向到这个页面并且携带了一些参数(openid等)。问题是点击微信的原生分享时,会把携带的这些参数一起分享出去&#xff0…

H5容器技术方案

●●● Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了一套标准化实现和优化方案。但是他们存在一些硬伤,比如App的发版周期偏长、有时无法…

H5的分享功能

在H5的 页面分享该活动给好友&#xff0c;代码如下&#xff1a; 1&#xff1a;需要添加 js引用&#xff1a; <script srchttp://res.wx.qq.com/open/js/jweixin-1.2.0.js></script> 2&#xff1a;需要添加对象&#xff1a; var wx require("weixin-js-sdk…

微信小程序共享元素+ page-container假页实现弹出效果

1.实现效果 2.实现原理 page-container page-container 小程序如果在页面内进行复杂的界面设计&#xff08;如在页面内弹出半屏的弹窗、在页面内加载一个全屏的子页面等&#xff09;&#xff0c;用户进行返回操作会直接离开当前页面&#xff0c;不符合用户预期&#xff0c;预期…

小程序与h5分享

小程序分享 可以参考小程序文档小程序文档链接 介绍&#xff1a;小程序中有直接在按钮上面加open-type就会触发分享了 如下: <button open-type"share"></button>在onShareAppMessage这个生命周期上面书写你要分享的内容就可以了&#xff0c; 如下&…

小程序嵌套 h5 并分享给朋友

1.先准备一个https地址&#xff0c;用于在微信公众平台/小程序中/开发管理/开发设置/业务域名 中设置 主要是后续要用到 web-view 组件 2.在小程序中设置跳转信息 task/index.vue this.graceJS.navigate(“/pagesA/task/sharePage?pathyes&houseName”houseName“&ty…

H5页面设置微信分享

H5页面设置微信分享 写代码之前的准备工作 1、登录微信公众号&#xff08;需要已经认证过的公众号&#xff09;&#xff0c;进入“设置与开发”→“公众号设置”→“功能设置”→“JS接口安全域名”&#xff0c;将文件下载下来&#xff0c;上传至与将要分享的页面相同的域名服务…

闲置电视盒子不要扔!搭建Blynk物联网服务器,太香了!

之前写过WINDOS搭建blynk物联网的教程&#xff0c;由于电脑一直开机功耗太大&#xff0c;现在终于找到了用电视机顶盒刷linux系统安装服务器的方法&#xff0c;先一睹为快 在开始今天的折腾前&#xff0c;自备一个刷好linux系统的电视机顶盒&#xff0c;可以按神雕的教程来 地…

学会搭建小程序生鲜商城,开启生鲜电商新模式

电商平台的出现&#xff0c;为人们带来了极大的便利。然而&#xff0c;传统的电商平台已经不能满足消费者对于购物体验的要求。如今&#xff0c;小程序生鲜商城因其轻量化、高效率等特点&#xff0c;成为了众多卖家的首选。本文将介绍如何学会搭建小程序生鲜商城&#xff0c;并…

【HTML+CSS】实现小盒子水平垂直居中大盒子

小div在大div中如何水平垂直居中 关于如何设置小盒子在大盒子里面水平垂直方向同时居中的实现方法有很多种&#xff0c;下面仅列举了常用 的几种。 首先看一下要实现的效果图及对应的html代码&#xff1a; // 大盒子嵌套小盒子 小盒子水平垂直居中 <div class"big&qu…

Docker网络---容器互联

前言&#xff1a; 虽然每个docker容器之间都能通过ip来进行互联&#xff0c;但当容器重新启动&#xff0c;ip就会被重新分配给重新启动的容器&#xff0c;这时同个容器由于重启导致ip不一样了&#xff0c;这时就会导致开发和运维的困难程度大大增加&#xff0c;这时候就要考虑…

京东首页静态页面html+css

个人名片&#xff1a; &#x1f60a;作者简介&#xff1a;一名大一在校生&#xff0c;web前端开发专业 &#x1f921; 个人主页&#xff1a; python学不会 &#x1f43c;第一次写博客&#xff0c;写的不好望指正 &#x1f385;学习目标: 坚持每一次的学习打卡 项目介绍&#xf…

Java-微信H5分享功能

操作前必看 微信自带的点击按钮分享已经下架了&#xff0c;目前只支持在微信浏览器点击右上角的分享&#xff0c;自己配置分享参数&#xff0c;而且目前分享参数也无法使用。 原因&#xff1a;响应国家反垄断规章&#xff0c;微信调整可实现访问外链&#xff1b; 异常&#x…