数据库MySql--day9 事务+总结

事务

事务的四大特性:ACID

在其四大特性中,隔离性又有以下四个隔离级别:读未提交,读已提交,可重复度与串行化

MySQL的基本架构

我们将MySQL分为前端、后端。前端为MySQL Server,例如命令行、图形化界面、JDBC等,他们负责将业务方的业务实际化,然后通过SQL解析器,给到后端的存储引擎,后端负责实际数据的真实存储。

99%都用的InnoDB,它是现在版本的默认存储引擎,早期版本的默认存储引擎为MyISAM

连接池的概念

在前端与后端的连接管理时,运用连接池的概念(Connection Pool)

没有连接池:客户建立连接,进行工作,释放连接,如此反复

有连接池:提前准备好很多连接,就成为连接池,当客户需要一个连接时,从池中取出一个给客户,进行工作,不需要时不去释放,而是放回连接池

可以减少频繁建立/释放连接的成本

故障恢复

与原子性和持久性相关

站在原子性的角度进行考虑,发生故障时,需要进行回滚操作,那么存在两种情况:No-Steal方案与Steal方案。

简单来说No-Steal方案为,当用户没有commit操作时,所有的操作不会持久化到硬盘上,一旦故障因为要保证原子性的原因会自动回滚。

而Steal方案,则代表有些sql在未commit的情况下持久化入硬盘了,所以在发生故障后对外提供服务前,将做的修改回滚。此时做回滚的依据需要记录:哪个事务修改了什么,修改前值是多少,修改后是多少,这些数据必须持久化进硬盘,被称为undo log。

而站在持久性的角度来考虑也存在两种方案:一种为一旦用户进行commit就立即写入,写入后发生故障也影响不大,因为此前数据已经持久化了。另一种为commit时不把所有数据都持久化在硬盘上,等待合适机会一次性写入,此时若发生故障,需要我们故障恢复阶段根据一些信息将修改重新执行一次,写到硬盘上。我们需要在commit并且告诉用户事务执行成功之前,记录下恢复持久性的信息:哪个事务,修改了什么,修改后是什么?这个信息被称为redo log。

我们做出如下图

由此,我们得知MySQL的启动阶段先进行故障恢复,再对外提供服务,而故障恢复依据为undo log与redo log。

并发控制与锁

并发控制模块与隔离性有关。

首先我们需要了解什么叫锁:

锁:与要被访问的数据组合成一个整体,当锁是打开状态,用户访问将其修改为关闭状态,访问完成后再打开,若访问时锁是关闭状态则需要等锁变为打开状态才能访问数据。这么做,保证了一次只有一个人能访问这个数据。

锁的粒度:锁的粒度越细,并发性越好。举个例子解释什么是锁的粒度:一栋楼级别的锁,代表整栋楼只有一把锁,只能允许一个人进入访问,无论他是只坐一把椅子还是打扫一个楼层,别人必须等他做完才能进这个楼,那么如果是一把椅子的锁,那么他坐在一个椅子上,仍然可以有别的用户进入这栋楼坐在别的椅子上进行操作,所以前者粒度粗好实现,后者粒度细但是很难实现。

针对锁,MySQL基于可重复度的隔离级别中存在两种不同的读:

select * from 表 where……;快照读 基于MVCC直接实现,不会加锁,别人仍然可以读取同样的行

select * from 表 where ……for update;当前读 一定读到当前版本,并且对其加锁,避免其他事务操作相同的行

而MVCC:被称为多版本并发控制,是指同时间存在多个事务,看到的是各自的版本

 小总结

事务的四大特性:原子性、持久性和隔离性为一致性服务,原子性和持久性与故障恢复模块有关,隔离性与并发控制模块有关。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花落尽舞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值