前言
本文主要为 mysql 相关知识
脏读,不可重复读,幻读
- 脏读:某个事务更新数据没有提交,另一个事务已经读取了数据
- 不可重复读:一个事务两次查询数据不一致,因为两次查询中间另一个事务更新了数据
- 幻读:一个事务两次查询数据总量不一致,因为两次中间另一个事务插入了数据
隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(Read Uncommitted) | √ | √ | √ |
读已提交(Read Committed) | × | √ | √ |
可重复读(Repeatable Read) | × | × | √ |
序列化(Serializable) | × | × | × |
Innodb 锁模式
- 共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的写锁
- 排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和写锁。
Innodb 加锁模式
- 意向锁是 innodb 自动加的
- update,insert,delete,innodb 会加上排他锁
- 普通 select 不会加锁,用到了索引的查询在索引上加行锁,否则加表锁,加锁语句如下
- 共享锁:LOCK IN SHARE MODE
- 排他锁:FOR UPDATE
索引 B+ 树特点
- 有 n 个子树的非叶子节点包括 n 个关键字,不存数据只用作索引,所有数据都存在叶子节点。
- 所有叶子节点包含所有关键字信息,且叶子节点关键字自小而大连接。
- 通常在 b+树上有两个头指针,一个指向根节点,一个指向关键字最小的叶子节点。
- 同一个数据会在不同节点重复出现,根节点最大元素就是 b+树最大元素。
B+树和 B 树区别
- B 树每个节点都存储数据,B+树只有叶子节点存储数据,所有的叶子结点使用链表相连
- B 树具有 n 个关键字的节点包含(n+1)棵子树,B+树包含(n)棵子树。
- B+ 树每次查找都是从根节点到叶子节点的路径
主键索引和一般索引的区别
主键索引叶子节点存放的是整行数据,非主键索引叶子节点存放的是主键的值,
非主键索引需要多查询一次 ID 索引树
版权声明:本文为原创文章,转载请注明出处和作者,不得用于商业用途,请遵守
CC BY-NC-SA 4.0协议。
赞赏一下