数据库 学习总结

mysql基础

mysql查询流程

在这里插入图片描述

mysql的页

mysql中各个数据页可以组成一个双向链表,每个数据页中的记录按照主键值从小到大的顺序组成一个单链表。
每个数据页都会存储在它里面的记录生成一个页目录。
页目录中是对数据主键分组形成的槽,查找是利用二分法可以查找到槽所指向的分组,然后遍历分组,可以得到记录数据。

mySQL索引

mySQL的索引常见的是B+树索引,(innoDB还会自动生成哈希索引)。B+树是一种平衡树,所有数据都保存在叶子节点,在叶子节点之上的节点只保存键值和页值。还可以简历二级索引,就是建立不是按照逐渐排序的索引,二级索引能提高检索效率,但是会降低插入,删除操作的效率。

事务

事务的特性

原子性:一个事务只能发生或者不发生,一个食物中的操作不可分割
一致性:数据库中的数据与真实数据具有一致性
隔离性:多个事务之间不影响
持久性:事务一旦提交,就会永久有效

事务的开启与关闭

开启:begin 或者 start transaction args
提交:commit:(也可以隐式提交)
回滚(中止):rollback
保存点:savepoint,当事务比较长的时候中间可以用保存点保存。
在这里插入图片描述

redo

redo的存在是为了保证事务的持久性,就是说当提交了事务之后,提交的事务应该被刷新到磁盘中,但是如果每次提交修改就将整个页刷新非常浪费时间,所以每次只需要把修改的记录日志redo刷新到磁盘中就可以了,这样如果系统崩溃了,可以借用redo日志文件恢复系统。
(这里面还有很多技术细节)

undo

记录恢复修改操作的日志

事务并发存在的一致性问题

脏写:一个事务修改另一个未提交事务修改的数据
脏读:一个事务读取另一个未提交事务修改的数据’
不可重复读:一个事务修改另一个未提交事务读取的数据
幻读:在未提交的检索事务的时候写入了满足检索要求的记录。

事务隔离级别

在这里插入图片描述
mysql中设置事务隔离级别的语句:
set [GLOBAL|SESSION] transaction isolation level

MVCC 和readView

MVCC就是多版本并发访问控制,具体就是维护一个版本链和创建readview,通过版本链和readview来实现在read comimitted 和 repeatable read隔离级别下执行,保证读写和写读操作的并发执行。
MVCC的版本链:当对记录更新 修改 添加等操作时生成一个版本连,每一条记录都有一个非减trx_id标记。trx_id代表事务发生的先后顺序。
在这里插入图片描述
ReadView:
readView主要是记录当前事务中哪些事务还没有提交,以此保证访问到的都是已经提交的事务。readView中的数据如下:
m_ids :记录中当前系统中活跃的事务trx_id链表
min_trx_id:最小的活跃事务trx_id
max_trx_id:在生成readview是系统应该分配给下一个事务的trx_id.

配合使用 将版本链中事务的trx_id与readview中的记录比较,当trx_id小于min_trx_id 或者大于min_trx_id但是小于max_trx_id而且不在m_ids中,表示这条事务可见,如果大于等于max_trx_id或者在m_ids中,则表示这条记录不可见,需要看下一条。

x锁 和 s锁

X锁 排他锁,当进行写操作时,对记录加上X锁,其他操作就无法获得加锁的机会
s锁 共享锁 ,当进行读操作时,对记录加上S锁,可以允许继续加S锁,不能加X锁。
也就是X锁和S锁实现了 读-读 并发可以,读写 写读 写写 并发不可以。
S锁和X锁的粒度可以在表级也可以在行级,在表级加锁后还可以在行级加锁,规则同上。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值