• 简单理解MySQL的存储引擎


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

  • 相关阅读:
    web基础学习
    创建共享内存后,进程结束,共享内存是否会消失?
    opencv特征增强,纺射变幻,模糊,锐化,翻转
    初级篇—第三章多表查询
    FL Studio21.2升级更新​安装包下载及功能介绍
    什么是JIT编译器?
    scratch大鱼吃小鱼 电子学会图形化编程scratch等级考试二级真题和答案解析2022年6月
    美国就业报告后美元小幅下跌 南非兰特走强
    TCP和UDP的基本认识
    格式工厂怎么把两个视频合并在一起
  • 原文地址:https://blog.csdn.net/weixin_43388691/article/details/127620125