mysql innodb锁简析(1)
说好的每天一个技术博客,选了iteye,但是,那个界面真的好丑啊,丑的让我都没写下去的欲望了,所以,还是转移到博客园里面吧,虽然这里也是很丑的!
直接步入正题:
1. 数据库锁包括:读锁(可共享锁)和写锁(排它锁),他们之间的关系如下
读锁(S) | 写锁(X) | |
读锁(S) | + | — |
写锁(X) | — | — |
说明:+表示兼容,—表示不兼容
由上图可见:读锁与读锁之间是兼容的,但是其他就不兼容,也就是说如果加了写锁,那么就不能加其他的所。
示例(摘抄同事的):
时间 |
Tx1: |
Tx2: |
T1 |
Set autocommit=0; |
Set autocommit=0; |
T2 |
select * from union_plan lock in share mode; |
|
T3 |
update union_plan set notes='' ; blocking |
2:查看锁的命令:SELECT * FROM information_schema.innodb_locks
3: 锁按粒度分:表锁和行锁
行锁:锁住的只是一行数据,对于其他数据没有影响。
表锁:顾名思义,就是锁住的是一个表,自此,这个表便无法操作,常用DDL命令中。由于表锁涵盖了行锁,所以,表锁和行锁之间有冲突
为了方便见此表锁和行锁之间的冲突便引入了意向锁,
意向锁分为意向读锁(IS)和意向写锁(IX)。
意向锁是表级锁,但是去表示一个事务正在读或者写一条记录而不是整个表,所以意向锁之间不会产生冲突,真正的冲突在加行锁时检查
在加行锁时,要先加一个意向锁。示例如下:
A. trx1 BEGIN
B. trx1 给 T1 加X锁,修改表结构。
C. trx2 BEGIN
D. trx2 给
T1 加IX锁(事务被阻塞,等待加锁成功)
E. trx2 给
T1 的一行记录加S或X锁.
表锁的兼容性矩阵
IS IX S X
IS + +
+ –
IX + +
- -
S + - + -
X - - - -
+ 代表兼容,
-代表不兼容
意向锁之间不会冲突,
因为意向锁仅仅代表要对某行记录进行操作。在加行锁时,会判断是否冲突。
结语:先写到这里吧,剩下的我再好好看看,写技术博客真的便于加强理解呢
mysql innodb锁简析(1)的更多相关文章
- mysql innodb锁简析(2)
继续昨天的innodb锁的分析: 注:此博文参考一下地址,那里讲的也很详细.http://xm-king.iteye.com/blog/770721 mysql事务的隔离级别分为四种,隔离级别越高,数 ...
- mysql: 关于MySQL InnoDB锁行还是锁表?
baidu zone - 关于MYSQL Innodb 锁行还是锁表,深入讲解
- [转]关于MYSQL Innodb 锁行还是锁表
关于mysql的锁行还是锁表,这个问题,今天算是有了一点头绪,mysql 中 innodb是锁行的,但是项目中居然出现了死锁,锁表的情况.为什么呢?先看一下这篇文章. 目时由于业务逻辑的需要,必须对数 ...
- MySQL InnoDB锁机制
概述: 锁机制在程序中是最常用的机制之一,当一个程序需要多线程并行访问同一资源时,为了避免一致性问题,通常采用锁机制来处理.在数据库的操作中也有相同的问题,当两个线程同时对一条数据进行操作,为了保证数 ...
- mysql InnoDB锁等待的查看及分析
说明:前面已经了解了InnoDB关于在出现锁等待的时候,会根据参数innodb_lock_wait_timeout的配置,判断是否需要进行timeout的操作,本文档介绍在出现锁等待时候的查看及分析处 ...
- RDS MySQL InnoDB 锁等待和锁等待超时的处理
https://help.aliyun.com/knowledge_detail/41705.html 1. Innodb 引擎表行锁等待和等待超时发生的场景 2.Innodb 引擎行锁等待情况的处理 ...
- MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析
MySQL InnoDB支持三种行锁定方式: l 行锁(Record Lock):锁直接加在索引记录上面,锁住的是key. l 间隙锁(Gap Lock):锁定索引记录间隙,确保索引记录的间隙 ...
- 你需要知道的MySQL&InnoDB锁都在这里
目录 一.前言 二.锁的类型 2.1 全局锁 2.2 表级锁 2.2.1 表锁 2.2.2 元数据锁(Meta Data Locks) 2.2.3 自增列锁(AUTO-INC Locks) 2.2.4 ...
- mysql——InnoDB 锁
https://www.cnblogs.com/leedaily/p/8378779.html 1.InnoDB锁的实现方式:给索引项加锁,只有通过索引条件检索数据,InnoDB才使用行级锁,否则,I ...
随机推荐
- lintcode:线段树的修改
线段树的修改 对于一棵 最大线段树, 每个节点包含一个额外的 max 属性,用于存储该节点所代表区间的最大值. 设计一个 modify 的方法,接受三个参数 root. index 和 value.该 ...
- maven也是apache下的项目
maven也是apache下的项目,你看maven官网了,域名都在Apache下
- IOS 视频分解图片、图片合成视频
在IOS视频处理中,视频分解图片和图片合成视频是IOS视频处理中经常遇到的问题,这篇博客就这两个部分对IOS视频图像的相互转换做一下分析. (1)视频分解图片 这里视频分解图片使用的是AVAssetI ...
- iOS开发--开发者帐号
iOS应用上线 http://www.jianshu.com/p/ffddc5e5f0b9 http://www.jianshu.com/p/986e02d38f1b 好不容易终于申请下来了ios 公 ...
- QTableView带可编辑进度条
main文件与上一个例子完全一致,也使用QStandardItemModel,关键是有这句:QStandardItem.setEditable(false); 继承QAbstractItemDele ...
- Hibernate笔记——第一个简单实例
1. 首先进行框架配置 导包 hibernate配置xml文件 ======================= 2. 创建并配置POJO类 Hibernate是操作持久化层的框架,和数据库打交道,其 ...
- 【web性能】js应该放在html页面的什么位置
所有浏览器在下载JS的时候,会阻止一切其他活动,比如其他资源的下载,内容的呈现等等.至到JS下载.解析.执行完毕后才开始继续并行下载其他资源并呈现内容. 外部JS的阻塞下载 所有浏览器在下载JS的 ...
- iOS 深入Objective-C的动态特性
深入Objective-C的动态特性 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有动态类型(Dynamic typing),动态绑定(Dynamic binding)和 ...
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
RMI.Hessian.Burlap.Httpinvoker.WebService的比较 2(转) [2]Java远程调用方法性能比较 [IT168技术]现在,Java远程调用方法很多,各种方 ...
- AE 栅格数据使用总结
RasterBand)的数据组成,一个波段就是一个数据矩阵.对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据集. ...