事务和索引-InnoDb的页

一. 事务

指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败.

四大特性

原子性 : 指事务中的所有操作,要么全部完成,要么全部不完成.

一致性 : 在事务开始和完成时,数据都必须保持一致性的状态[中间状态的数据对外部不可见]
张三向李四转账100元,保证张三账户减少100元,而此时又没有向李四账户添加,一致性就是保证这种中间状态数据对外部不可见,只有最初状态和最终状态对外部可见.
隔离性 : 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库时独立的;[适当的破坏一致性来提升性能与并行度 例如:实现最终一致~=读未提交]
持久性:事务提交后,对系统的影响是永久的

一致性与隔离性: 为了实现一定的并发性,隔离性通过破坏强一致性提升性能和并行度,实现最终一致

并发事务可能出现的问题

- 脏读 : 一个事务一对数据进行了修改,但是修改还未提交到数据库中,另一个事务二使用了这个数据,事务一如果之后在对数据进行了修改,事务二读到的数据就是脏数据.
- 不可重复读 : 指一个事务内多次读取同一数据
,事务二在其两次读取数据之间对数据进行修改,导致两次读取数据不相同.
- 幻读: 指的是事务一在开始读取到一些数据,但是另一个并发事务二删除了几行数据,事务一再次查询找不到,这样就发生了幻读.

不可重复读与幻读区别 :
不可重复读的重点是修改,幻读的重点是在于新增或者删除.

二.索引-InnoDb的页

索引是对数据库中一列或者多列的值进行排序的一种结构. 索引的作用相当于图书的目录. 将无序的数据转换为有序的数据

InnoDb的页

mysql的基本存储结构是页

[外链图片转存失败(img-31davUma-1563712641192)(C:\Users\MIMO\AppData\Roaming\Typora\typora-user-images\1563678286142.png)]

[外链图片转存失败(img-8CTVrT6b-1563712641196)(C:\Users\MIMO\AppData\Roaming\Typora\typora-user-images\1563679979517.png)]


1. 页中的存储

在存储数据的时候,记录会存储到User Records部分 ,新页面形成的时候不存在User Records,再插入一条记录的时候,会从Free Space 中去申请一块符合该记录大小的空间并划分到User Records中,当Free SpaceUser Records 完全替换之后,也就意味着当前页使用完毕.[如果再有新的记录插入,需要申请新的页]

  • 各个数据页可以组成一个双向链表

    在File Header中记录当前页的上一个页和当前页的下一个页

  • 每个数据页中的记录又可以组成一个单向链表

    • 每个数据页都会为存储在它里面的记录生成一个页记录[User Records]
      - [外链图片转存失败(img-d7elNOTe-1563712641198)(C:\Users\MIMO\AppData\Roaming\Typora\typora-user-images\1563701284014.png)]
  • 同时会为页记录对应主键生成对应的页目录也成为槽[spot]放在Page Directory里面

    [外链图片转存失败(img-DKdh7TO1-1563712641200)(C:\Users\MIMO\AppData\Roaming\Typora\typora-user-images\1563699986481.png)]

2. 这些槽(分组)是什么?又是怎么生成的呢?

序号: 分成的组的编号

偏移值: 代表当前组的地址偏移量

  1. 对于最小记录的分组只能有1条记录,对于最大记录所在的分组只能有1~8
  2. 初始状态下,一个数据页里面只有最小记录和最大记录[伪记录] ,所以有两个分组[槽]
  3. 之后插入的每条记录都会插入到最大记录中去,直到最大记录的组的记录数等于8
  4. 如果最大记录组中的记录数等于8,并且还有记录插入,就会将最大记录所在组平均分裂成两个组,这时的最大记录的组的记录数只剩下4个,然后向最大记录的组中添加新的记录

3. 索引在数据页怎样查找的?
  1. 通过二分法确定该记录所在的槽

  2. 然后通过记录的next_record 属性组成的链表遍历查找该槽的各个记录.

4. 如何保证页从内存同步到磁盘的完整性?
  1. 在File Trailer 中前四个字节表示校验和
  2. 与File Header中的校验和相对应,如果页在内存中修改了,在同步之前要把它的校验和计算出来,因为File Header在页面的前面,所以会首先被同步到硬盘中,当完全写完时,校验和也会被写到页的尾部,如果完全同步成功,尾部和头部的校验和是完全相同,反之则中间出了错[断电情况或者其他]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值