MySQL进阶(数据库引擎)——MyISAM和InnoDB引擎的区别

news2024/12/24 15:34:48

在这里插入图片描述

1.是否支持行级锁

MyISAM 只有表级锁,而InnoDB 支持行级锁和表级锁,默认为行级锁。

(1)MySQL大致可以归纳为以下3种锁:

  • 表级锁:开销小,加锁快;不会出现死锁;锁的粒度大,发生锁冲突的概率最高,并发度最低。
  • 行级锁:开销大,加锁慢;会出现死锁;锁的粒度小,发生锁冲突的概率最低,并发度最高。
  • 页面锁:开销 和加锁时间界于表锁和行锁之间;会出现死锁,锁定的粒度界于表锁和行锁之间,并发一般。

(2)表锁

MyISAM会在执行select语句前,会自动给涉及的表加读锁,在执行增删改操作前会自动给涉及的表加写锁。

  • MySQL的表锁有两种模式:
    • 表共享读锁
    • 表独占写锁
  • 读锁会阻塞写,写锁会阻塞读和写。
    • 对MyISAM表的读操作,不会阻塞其它进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它线程的写操作。
    • 对MyISAM表的写操作,会阻塞其它进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。

读锁的演示

在这里插入图片描述

窗口1执行

在这里插入图片描述

窗口2的语句被阻塞

在这里插入图片描述

关闭窗口1,窗口2才执行成功

在这里插入图片描述

执行unlock tables释放锁

在这里插入图片描述

释放后才成功

在这里插入图片描述

create table dept(
    deptno int not null auto_increment,
    dname varchar(20),
    loc varchar(20),
    primary key(deptno)
)ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8
# 打开两个会话窗口
# 窗口1执行以下语句
lock table dept read;
select * from dept;
# 窗口2执行执行以下语句
select * from dept;
insert into dept values(null,'财务部','北京');
# 此时,窗口2的请求被阻塞,必须等待会话1释放锁后才能执行;
# 释放会话1的锁,并观察会话2的执行结果。
unlock tables;

写锁的演示

会话1加写锁,会话2读操作,会被阻塞

在这里插入图片描述

会话1 释放锁

在这里插入图片描述

# 会话1加写锁
lock table dept write;
delete from dept where deptno = 1;
# 会话2读操作,会被阻塞
select * from dept;
# 会话1 释放锁
unlock tables;
# 观察会话2 查询结果

注意:如果持有表锁的session异常终止的话(比如说执行了“ctrl+z”),那么该session是不会主动释放锁的,这时候我们可以重启mysql服务器,不推荐。可以通过show processlist 命令来查看线程ID,通过kill 【线程ID】

在这里插入图片描述

总结:MyISAM不适合写表的引擎,写锁后,其它线程不能做任何操作。

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

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

相关文章

C# FileInfo类的使用方法及常用操作(附代码示例)

在C#编程中,处理文件操作是一项常见而重要的任务。为了更好地管理和操作文件,C#提供了一个强大且灵活的FileInfo类。本文将深入探讨C# FileInfo类的使用方法,并为您提供一些实用的代码示例。 目录 一、什么是FileInfo类?二、使用F…

CLion使用SSH远程连接Linux服务器

最近要一直用实验室的服务器写Linux下的C代码, 本来一直用VScode(SSH)连接服务器, 但是我以前还是用JetBrains的IDE用的多, 毕竟他家的IDE代码提示和功能在某些细节上更加丰富。所以这次我使用了Clion里的远程连接(同样也是SSH工具)连接上了我的服务器, 实现了和VScode上同样的…

NOIP2023模拟1联测22 黑暗料理

NOIP2023模拟1联测22 黑暗料理 题目大意 自己看 思路 两个数相加能够产生质数的情况就是:11 或者 偶数质数 那么 1 1 1 不能保留超过一个 建一个图,原点连向所有奇数点,所有偶数点连向汇点,奇数点和偶数点的和为奇数的就相连 …

分布式事务 学习

分布式事务 关系型数据库事务(本地事务) 原子性:构成事务的所有操作,要么都执行完成,要么都不执行/一致性:在事务执行前后,数据库的一致性约束没有被破坏。隔离性:并发的两个事务的…

『第一章』命运的齿轮开始转动:雨燕(Swift)诞生!

在本篇博文中,您将学到如下内容: 1. 破茧成“燕”2. 持续进化!3. Swift 5.0:ABI 稳定性4. Swift 5.1:模块稳定性和库进化5. Swift 5.9 来了6. 登高望远:Swift 6.0总结 雨燕翻新幕,风鹃绕旧枝 金鹊徒为滞,雨…

程序员的新去处?国内新能源公司大汇总!

近几年来,传统互联网企业哀鸿遍野,而新能源车企却在悄然崛起:HC逐年增加,薪资逐渐起飞,年终分红也让人眼红…… 聪明的程序员们已经把目光瞄准了新时代新能源车企,今天就带大家横向对比一下国内比较火热的…

2.7.C++项目:网络版五子棋对战之session模块的设计

文章目录 零、前置一、意义二、功能三、管理四、框架五、完整代码 零、前置 在WEB开发中,HTTP协议是⼀种无状态短链接的协议,这就导致⼀个客户端连接到服务器上之后,服务器不知道当前的连接对应的是哪个用户,也不知道客户端是否登…

24李永乐模拟6套卷中的一道定积分定义+真题改编题

大概率是武忠祥老师出的一道题,同时考察了数形结合,定积分换元,无穷级数表示,广义积分中值定理,定积分定义的一道真题改编好题。 第二问用第一问结论,区间再现一步秒杀,颇有真题风范。

找不到msvcp100.dll解决教程

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,本文将介绍四个修复msvcp100.dll丢失的方法,帮助读者快速恢复计算机的正常运…

【c++】运算符重载实例

重载自增自减运算符 Intger num(2); num; num;对自增运算符的重载要区分前置和后置。在重载之前需要思考一个问题,num是返回一个临时变量还是num对象的本体。 为了解决这个问题可以考虑实现一个Inc_()函数和_Inc()函数分别模仿后置和前置的行为 Integer Inc_(){i…

Calibre拾遗:FDI (Foreign Database Interface)系统简介

Calibre是强大的GDS处理工具,包括查看,验证,分析等操作,操作由浅入深,除过手动编辑GDS的不是很灵活外,其他各种命令和操作策略,都是远(遥)远(遥)走…

使用create-vue创建项目

认识create-vue create-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代构建工具),为开发提供极速响应。 使用create-vue创建项目 1.前提环境条件 已安装16.0或更高版本的Node.js node -v 2.创建一个Vue应用 npm init…

Monocular arbitrary moving object discovery and segmentation 论文阅读

基本信息 题目:Monocular Arbitrary Moving Object Discovery and Segmentation 作者: 来源:BMVC 时间:2021 代码地址:https://github.com/michalneoral/Raptor Abstract 我们提出了一种发现和分割场景中独立移动的…

[算法训练营] 回溯算法专题(一)

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Linux系列讲解 —— VIM配置与美化

目录 1. Vim基本配置1.1 配置文件1.2 基本配置 2. 插件管理器Vundle2.1 下载Vundle2.2 在vimrc中添加Vundle的配置 3. Vundle的使用3.1 安装插件3.2 卸载插件 1. Vim基本配置 1.1 配置文件 vim的配置文件有两处,请根据实际情况选择修改哪个。 (1) 全局配置文件&am…

电子元器件管理系统 JAVA语言开发

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的电子元器件管理系统包含元器件单位模块、元器件仓库模块、元器供应商模块、元器件品类模块、元器件明细模块、元器件采购模块、元器件采购审核模块、元器件领用模块、学生元器件申请模块…

前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(二)

阳光总在风雨后,请相信有彩虹。 案例 - 图书管理 bootstrap弹框 需求,点击添加按钮,没有离开当前页面,在当前页面弹出弹框(弹窗) 先学着实现一个简单的弹框,如下图右下角 bootstrap有两种方式…

openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户

文章目录 openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户108.1 创建、修改和删除用户108.2 私有用户108.3 永久用户108.4 用户认证优先规则 openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户 使用CREATE USER和ALTER USER可以创建和管理数据…

解决虚拟机联网问题

虚拟机开机后发现右上角缺少联网标志(下面有正常联网标志),这样就是连不上网的 不信你可以打开Ubuntu里面的浏览器或ping www.baidu.com 1.编辑虚拟机设置-->网络适配器-->如图所示 2.选择编辑-->虚拟网络编辑器 3.更改设置 4此处可以选择还原默认设置&am…

【JAVA学习笔记】42 - 内部类(难点,重点)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/innerclass_ 一、基本介绍 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成…