Mysql 锁机制笔记1
需积分: 0 84 浏览量
更新于2022-08-03
收藏 98KB PDF 举报
MySQL的锁机制是数据库管理系统中用于确保数据一致性的重要工具,尤其是在高并发的读写操作中。MySQL支持三种级别的锁:行级锁、页级锁和表级锁。其中,MyISAM存储引擎使用的是表级锁,而InnoDB则采用行级锁和表级锁,同时支持页级锁。
**1. 表级锁:**
表级锁是开销最小、加锁速度快的选择,但它的锁定粒度大,容易导致锁冲突,因此并发度相对较低。在MyISAM中,锁有两种模式——共享锁(读锁)和排他锁(写锁)。读锁允许其他事务读取数据,但阻止写操作;写锁则阻止其他事务的读写操作。MyISAM在执行SQL时会自动为SELECT加上共享锁,为UPDATE、DELETE等操作加上排他锁。MyISAM不支持锁升级,如果涉及更新,一开始就需加排他锁。并发插入的行为受concurrent_insert系统变量控制,有三种模式。
**2. 行级锁:**
InnoDB存储引擎使用行级锁,这提供了更高的并发性。行级锁只锁定涉及的特定行,减少了锁冲突的可能性,尤其适用于大量按索引条件更新少量数据的场景。行级锁包括共享锁(S)和排他锁(X)。共享锁允许读,排他锁允许读写。此外,InnoDB还使用意向锁(IS和IX)来支持多粒度锁定。行级锁是通过对索引项加锁实现的,这意味着只有通过索引检索数据时才会使用行级锁,否则将使用表锁。
**事务与并发问题:**
事务的并发处理会导致不可重复读、更新丢失、脏读和幻读等问题。为解决这些问题,存在四种事务隔离级别:未提交读、提交读、可重复读(InnoDB默认)和串行化。每个隔离级别都有不同的锁策略。
**1. 不可重复读:** A事务在两次读之间,B事务修改了数据,导致A事务两次读取结果不一致。
**2. 更新丢失:** A和B同时操作同一数据,最终一个覆盖另一个的结果。
**3. 脏读:** A事务读到未提交的数据,然后该数据被回滚,导致A事务读到了无效信息。
**4. 幻读:** A事务在第二次读取时,B事务插入了满足条件的新数据,造成幻读。
在实际应用中,理解并合理使用这些锁机制,特别是InnoDB的行级锁特性,对于优化并发性能和避免锁冲突至关重要。需要注意的是,虽然行级锁在不同行间通常是不冲突的,但如果使用相同的索引键,即使是不同行,也可能发生锁冲突。因此,在设计查询时,应尽量利用索引来减少锁的影响。

章满莫
- 粉丝: 36
最新资源
- 该项目为一个集数据抓取与展示一体的ACM队员数据系统,基于Django、python实现。.zip
- 辅助背单词软件,基于艾宾浩斯记忆曲线(其实背啥都行)的Python重构版,增加在线查词与翻译等功能.zip
- 基于C开发的命令行输入输出流重定向与实时分析工具_支持快捷按键和文本框输入实时过滤计算分析多格式结果呈现文本提示弹窗曲线表格支持批量测试和日志抓取_用于开发调试协议分.zip
- 各种有用的web api 基于Golang, Python(tornado django scrapy gevent).zip
- 华南理工大学找到卷王,基于 Python 的综测系统数据爬虫.zip
- 湖南大学(HNU)数据库系统课程大作业 ATM系统 前端基于Python的PyQt5,后端基于MySQL.zip
- (新闻爬虫),基于python+Flask+Echarts,实现首页与更多新闻页面爬取
- 基于 Flask + Requests 的全平台音乐接口 Python 版.zip
- 基于 FFmpeg ,使用 Python 开发的批量媒体文件格式转换器。.zip
- 基于 CAI 的 OneBot Python 实现.zip
- 基于 nonebot2 开发的消息交互式 Python 解释器,依赖 docker SDK.zip
- 基于 Python 3 + Django 2 开发的用于适配手机的简单 Jenkins 构建平台.zip
- Python 语言的爬楼梯问题实现-计算爬到第 n 级台阶的方法数
- 基于 Napcat, NcatBot, JMComic-Crawler-Python 的 QQ 机器人。.zip
- 基于 Python Tornado 的博客程序 (练习).zip
- 基于 Python 3.5 + Django 2.0 开发的简单个人博客.zip