【知识库】--Mysql InnoDB 行锁实现 和 表锁实现(205)
来源:互联网 发布:施工进度横道图软件 编辑:程序博客网 时间:2024/06/05 16:10
1 两个事务,使用同一个主键作为更新条件时,一定会有一个成功一个等待锁释放!
因为:上了行锁。
2 复习下:事务(Transaction)及其ACID属性
事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性。
- 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。
- 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态。这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性;事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的。
- 隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外部并发操作影响的“独立”环境执行。这意味着事务处理过程中的中间状态对外部是不可见的,反之亦然。
- 持久性(Durable):事务完成之后,它对于数据的修改是永久性的,即使出现系统故障也能够保持。
3 innodb行锁实现方式 重点
InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的。 InnoDB这种行锁实现特点意味着:只有通过索引条件检索数据,InnoDB才使用行级锁,否则,InnoDB将使用表锁!
1)InnoDB存储引擎的表在不使用索引时使用表锁2)有了索引以后,在对索引字段查询时,使用的就是行级锁
3)由于MySQL的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但是如果是使用相同的索引键,是会出现锁冲突的
4)当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另外,不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数据加锁。
5)间隙锁(Next-Key锁) 防止幻读
当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个“间隙”加锁,这种锁机制就是所谓的间隙锁(Next-Key锁)。
参考:
https://lanjingling.github.io/2015/10/10/mysql-hangsuo/
阅读全文
0 0
- 【知识库】--Mysql InnoDB 行锁实现 和 表锁实现(205)
- Mysql InnoDB行锁实现方式
- Mysql InnoDB行锁实现方式
- Mysql InnoDB行锁实现方式
- Mysql InnoDB行锁实现方式
- Mysql InnoDB行锁实现方式
- Mysql InnoDB行锁实现方式
- innodb 行锁实现算法
- InnoDB行锁实现方式
- mysql innodb的行级锁和表锁
- MySQL锁(MyISAM和InnoDB)
- InnoDB存储引擎行锁的实现
- InnoDB行锁的实现分析
- InnoDB行锁的实现方式
- 知识库--Realm实现(52)
- mysql事务和锁InnoDB
- mysql事务和锁InnoDB
- mysql事务和锁InnoDB
- SQLSever 存储过程创建
- 【项目记录】山东大学场馆管理系统之——用户部分
- C++ NULL与nullptr
- 此文谨记学习之路
- Android View动画<一>
- 【知识库】--Mysql InnoDB 行锁实现 和 表锁实现(205)
- Oracle调用C#开发web services
- 剑指offer-将字符串转化为数字
- hud 2089 不要62 hdu 3555 Bomb
- 中缀表达式如何转为后缀表达式
- ONVIF协议网络摄像机(IPC)客户端程序开发(5):门外汉理解ONVIF协议
- [PAT-乙级]1043.输出PATest
- 【调错】NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
- 安卓工具类分享-----来自github