【内容】
- curd
- acid
- 并发会带来的问题
- 多表查询(内连接,外连接)
【补充】
========================================================
1. curd
增删改查
2. acid
一个支持事务(Transaction)的数据库具备的特性
ACID | 全名 | 解释 |
---|---|---|
A | Atomicity | 被事务包裹的操作是不可分割的 |
C | Consistency | 数据库总量不应该在提交操作前后发生变化(宏观的抽象的性质) |
I | Isolation | 多个事务在并发时,解决如“脏读“等”并发性问题的能力 |
D | Durability | 保证数据库啊哦做之后必须立即写入持久化介质(如硬盘) |
3. 并发问题与隔离机制
√:该问题可能出现
×:该问题不出现
隔离机制 | 脏读 | 不可重复读 | 幻读 | 解释 |
---|---|---|---|---|
Read Uncommitted | √ | √ | √ | 一个事务可以读取另一个事务并未提交的结果(隔离性最低) |
Read Committed | × | √ | √ | 一个事务提交后另一个事务才能读取到同一个数据的更新结果(大部分数据库的default) |
Repeatable Read | × | × | √ | 在该事务的时间内,无论其他事物的对其修改与否,读取结果都是完全相同的(mysql的default) |
Serializable | × | × | × | 所有事物的操作必须依次执行(隔离性最高,但是性能最差,并发很低) |
解释 | 其他事物看见了该事物没有提交的结果(如果该事物回滚,对方读取的叫做脏数据) | 在整个事物过程中,多次读取数据,其结果不一样(数据值) | 在整个事物过程中,多次查询结果不一样(sql的结果) |
4. 多表查询
交叉连接(笛卡尔积,x不推荐)
内连接(隐式内连接,显示内连接)
外连接(左外连接,右外连接)
5. mysql索引 && b+
墙裂推荐参考:https://yq.aliyun.com/articles/9280
b+树是B树和索引顺序访问方法(ISAM)得到的
b+树的查找(IO的次数=b+树的高度)
【MyISAM && InnoDB】
都是数据库引擎
MyISAM传统类型
InnoDB 改进版本,主要的区别是支持ACID的事务
MyISAM | InnoDB | |
---|---|---|
事务的处理 | 非事务安全型的 | 事务安全型 |
锁机制 | 表级别的锁 | 行级别的锁 |
擅长的操作 | select | insert, update |
缓存 | 索引块 | 数据块 |
寻址 | 文件偏移量 | 文件块,文件行 |
- 除了上面的插入操作会做拆分
B+树实际上在拆分前首先检查,进行旋转操作,保证树尽量平衡,不会有一个分支特别冗杂。 - B+树的删除操作:使用填充因子控制删除(>50%)
索引=逻辑结构+物理地址
B+树的逻辑结构,保证在lognN的时间内找到需要的值;每一个节点有一个对应的物理地址的指针
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
6. B树 B+树的优势
B树
根节点至少两个子节点
阶:所有节点中最多的孩子的个数
比如一个节点最多3个数字的23树,如果按照大小,某个节点的数据到达4个就会分裂。中间的提升到父亲节点上去。若父亲节点也是4个,递归分裂。
B+树
所有的叶节点构成有序链表,
B+树的非叶子结点只包含导航信息,不包含实际的值
B+ 树的优点在于:
由于B+树在内部节点上不包含数据信息,因此在内存页中能够存放更多的key。 数据存放的更加紧密,具有更好的空间局部性。因此访问叶子节点上关联的数据也具有更好的缓存命中率。
B+树的叶子结点都是相链的,因此对整棵树的便利只需要一次线性遍历叶子结点即可。而且由于数据顺序排列并且相连,所以便于区间查找和搜索。而B树则需要进行每一层的递归遍历。相邻的元素可能在内存中不相邻,所以缓存命中性没有B+树好。