MyISAM 和 InnoDB 锁总结
发布日期:2021-10-06 02:38:38
浏览次数:6
分类:技术文章
本文共 914 字,大约阅读时间需要 3 分钟。
为什么要用锁?
你在试衣间试衣服,没有锁,别人就会推门进来,场面会很尴尬!!!
什么是锁?
- 锁是计算机协调多个进程或线程并发访问某一资源的机制;
- 在数据库中,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素;
- 锁对数据库而言显得尤其重要,也更加复杂。
Mysql 中的锁?
- 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;
- 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高;
- 页锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
锁的使用场景?
- 表级锁更适合于以查询为主,只有少量按索引条件更新数据的应用,可以考虑使用MyISAM锁;
- 行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并发查询的应用,可以考虑使用InnoDB锁.
MyISAM 锁-- 表级锁
MySQL 的表级锁有两种模式:
- 表共享读锁(Table Read Lock)
- 表独占写锁(Table Write Lock)
None(无锁时) | 读锁 | 写锁 | |
读锁 | 是 | 是 | 否 |
写锁 | 是 | 否 | 否 |
读锁 | 写锁 | |
同session | 读当前被锁表:可读 读当前被锁表别名表: 报错 写当前被锁表:报错 读其他表:报错 写其他表:报错 | 读当前被锁表:报错 读当前被锁表别名表: 报错 写当前被锁表:可写 读其他表:报错 写其他表:报错 |
不同session | 读当前被锁表:可读 写当前被锁表:等待 读其他表:可读 写其他表:可写 | 读当前被锁表:等待 写当前被锁表:等待 读其他表:可读 写其他表:可写 |
InnoDB 锁--行级锁
注:必须有索引才能实现,否则会自动锁全表!!!
读锁 | 写锁 | |
同session | 可读 可写 | id= 1加写锁 |
不同session | 可读 | 允许读 写id= 1的数据,等待 写id != 1的数据,可写 写 非索引列查询条件数据,等待 |
加锁 | 可加读锁 | 不可加任何锁 |
如何释放锁?
执行Begin,commit,或者rollback
转载地址:https://blog.csdn.net/luxuiary/article/details/106547078 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
很好
[***.229.124.182]2024年04月16日 20时14分08秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
快到年底了,小伙伴开始关心年终奖话题了
2019-04-27
Python 第七节 第二课
2019-04-27
Java基础 第一节 第十六课
2019-04-27
显示隐藏文件 for Mac
2019-04-27
《使用 React 开发新项目》翻译
2019-04-27
mac 中使用终端连接Linux服务器以及对文件或文件夹进行上传和下载操作
2019-04-27
mac使用vim命令修改jar包配置文件内容
2019-04-27
Ubuntu16.04 安装与配置 JDK
2019-04-27
CentOS 7x 防火墙命令使用介绍
2019-04-27
Android中实现播放背景音乐功能
2019-04-27
将 CentOS 7 的本地 yum 源更换成阿里云源
2019-04-27
CentOS 7安装Mongodb并使用Robo 3T远程测试连接
2019-04-27
Shell命令获取服务的进程ID
2019-04-27
4G EPS 第四代移动通信系统
2019-04-27
用 C 语言开发一门编程语言 — 变量元素设计
2019-04-27
Linux 操作系统原理 — 文件系统 — 虚拟文件系统
2019-04-27
Linux 操作系统原理 — 文件系统 — 实现原理
2019-04-27
Kubernetes — 生产环境架构简述
2019-04-27
Kong APIGW — Overview
2019-04-27