什么是事务
事务是由数据库中一系列的访问和更新组成的逻辑执行单元
事务的逻辑单元中可以是一条SQL语句,也可以是一段SQL逻辑,这段逻辑要么全部执行成功,要么全部执行失败
举个最常见的例子,你早上出去买早餐,支付宝扫码付款给早餐老板,这就是一个简单的转账过程,会包含两步
从你的支付宝账户扣款10元
早餐老板的账户增加10元
这两步其中任何一部出现问题,都会导致整个账务出现问题
假如你的支付宝账户扣款10元失败,早餐老板的账户增加成功,那你就Happy了,相当于马云请你吃早餐了,O(∩_∩)O哈哈~
假如你的支付宝账户扣款10元成功,早餐老板的账户增加失败,那你就悲剧了,早餐老板不会放过你,会让你重新付款,相当于你请马云吃早餐了-_-?
事务就是用来保证一系列操作的原子性,上述两步操作,要么全部执行成功,要么全部执行失败
数据库为了保证事务的原子性和持久性,引入了redo log和undo log
MySQL中是如何实现事务提交和回滚的?
为了保证数据的持久性,数据库在执行SQL操作数据之前会先记录redo log和undo log
redo log是重做日志,通常是物理日志,记录的是物理数据页的修改,它用来恢复提交后的物理数据页
undo log是回滚日志,用来回滚行记录到某个版本,undo log一般是逻辑日志,根据行的数据变化进行记录
redo/undo log都是写先写到日志缓冲区,再通过缓冲区写到磁盘日志文件中进行持久化保存
undo日志还有一个用途就是用来控制数据的多版本(MVCC)
简单理解就是:
redo log是用来恢复数据的,用于保障已提交事务的持久性
undo log是用来回滚事务的,用于保障未提交事务的原子性
如果感觉对你有些帮忙,请收藏好,你的评论和点赞是对我最大的鼓励!