文章目录
- 1、ACID
- 事务原理
- 事务持久性
- 事务原子性
- MVCC基本概念
- MVCC基本原理
- undo log
- undo log版本链
- readview
- MVCC实现原理
- RC读已提交
- RR可重复读
- MVCC实现原理
- 总结
- 2、并发事务引发的问题
- 3、事务隔离级别
- 4、索引
- 4.1、索引概述
- 4.2、索引优缺点
- 4.3、索引结构
- 二叉树
- B-Tree树
- B+Tree树
- B+Tree优化
- Hash索引
- 面试题
- 索引分类
- 聚集索引和二级索引
- 回表查询
- InnoDB主键索引的B+tree高度为多高呢?
- 索引语法
- 慢查询日志
- SQL性能分析
- explain执行计划
- 共享锁
- 排他锁
1、ACID
事务原理
事务持久性
事务原子性
MVCC基本概念
MVCC基本原理
undo log
undo log版本链
readview
MVCC实现原理
RC读已提交
RR可重复读
MVCC实现原理
总结
2、并发事务引发的问题
3、事务隔离级别
注意:事务隔离级别越高,数据越安全,但性能越低
4、索引
4.1、索引概述
4.2、索引优缺点
4.3、索引结构
二叉树
B-Tree树
B+Tree树
B+Tree优化
Hash索引
Hash索引的特点
面试题
索引分类
聚集索引和二级索引
回表查询
InnoDB主键索引的B+tree高度为多高呢?
索引语法
慢查询日志
SQL性能分析
explain执行计划
共享锁
共享锁,又称读锁、S锁。上厕所就相当于修改操作。当事务给行加了共享锁,此时行只能进行读操作,而不能进行写操作。别的事务也只能给其加共享锁,不能加排他锁。
排他锁
排他锁,又称写锁、X锁。当加了排他锁之后,就相当于把洗手间的门关上了,别人不能进去洗手、化妆之类的。也就是说不能进行写操作以及读操作,其他事务不能给其再加锁了。
对于排他锁大家的理解可能就有些差别,我当初就犯了一个错误,以为排他锁锁住一行数据后,其他事务就不能读取和修改该行数据,其实不是这样的。排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。
mysql InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,如果加排他锁可以使用select …for update语句,加共享锁可以使用select … lock in share mode语句。
所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select …from…查询数据,因为普通查询没有任何锁机制。