Mysql事务原理

本文详细阐述了事务在数据库操作中的重要性,特别是MySQLInnoDB引擎如何通过undolog和redolog实现事务的原子性和持久性。涉及原子性、一致性、隔离性和持久性等概念,并解释了事务执行流程和MySQL的持久化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是事务

事务: 指作为单个逻辑工作单元(Service方法)执行的一系列操作(数据库操作。),要么完全地执行,要么完全地不执行.

事务可以看做是一组任务,通常对应了一个业务方法,这些任务要么全部成功,要么全部失败。

2.事务的四大特性

事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)四个特性,简称 ACID,缺一不可。

  • 原子性 Atomicity :把一组操作(一个事务)看成一个整体,这一组操作要么全部成功,或者全部失败,不可分割

  • Consistency 一致性 :一致性要求任何写到数据库的数据都必须满足于预先定义的规则(数据不能出错),简单来说就是在任何时间点都不能出现违反一致性要求的状态。Mysql通过排他锁来保证一致性

  • Durability 持久性 : 持久性的关键在于一旦“完成提交”(committed),那么数据就不会丢失,因为数据已经被持久化到磁盘。

  • Isolation 隔离性 :多个事务之间是相互隔离的,互不影响,隔离性要求如果两个事务修改同一个数据,则必须按顺序执行,并且前一个事务如果未完成,那么未完成的中间状态对另一个事务不可见。

3.Mysql的原子性是如何实现的

利用Innodb的undo log,undo log名为回滚日志,是实现原子性的关键,当事务回滚时能够撤销所有已经成功执行的sql语句,他需要记录你要回滚的相应日志信息。 例如

  • 当你delete一条数据的时候,就需要记录这条数据的信息,回滚的时候,insert这条旧数据

  • 当你update一条数据的时候,就需要记录之前的旧值,回滚的时候,根据旧值执行update操作

  • 当年insert一条数据的时候,就需要这条记录的主键,回滚的时候,根据主键执行delete操作

undo log记录了这些回滚需要的信息,当事务执行失败或调用了rollback,导致事务需要回滚,便可以利用undo log中的信息将数据回滚到修改之前的样子。

undo log 除了用作于原子性的保证,mvcc多版本并发控制也是基于undolog的

4.Mysql的持久性是如何实现的

undolog实现事务原子性,redolog实现事务的持久性

Redo Log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是Redo Log已经持久化。系统可以根据Redo Log的内容,将所有数据恢复到最新的状态。

采用redo log的好处?

redo log进行刷盘比对数据页刷盘效率高,具体表现如下

  • redo log体积小,毕竟只记录了哪一页修改了啥,因此体积小,刷盘快。

  • mysql的数据页在磁盘上是随机的,而Redo log是一直往末尾进行追加,属于顺序IO。效率显然比随机IO来的快。

redo log它由两部分组成,内存中的 redo log buffer,磁盘上的 redo log file

  • redo log file 由一组文件组成,当写满了会循环覆盖较旧的日志,这意味着不能无限依赖 redo log,更早的数据恢复需要 binlog

  • buffer 和 file 两部分组成意味着,写入了文件才真正安全,同步策略由参数 innodb_flush_log_at_trx_commit 控制

    • 0 - 每隔 1s 将日志 write and flush 到磁盘

    • 1 - 每次事务提交将日志 write and flush(默认值)

    • 2 - 每次事务提交将日志 write,每隔 1s flush 到磁盘,意味着 write 意味着写入操作系统缓存,如果 MySQL 挂了,而操作系统没挂,那么数据不会丢失

5.Mysql的InnoDB事务执行原理

比如:要把A=1修改为A=3,事务执行流程如下

1. 事务开始. 
2. 记录A=1到undo log. 
3. 修改A=3.
4. 记录A=3到redo log. 
5. H.将redo log写入磁盘。 
6. 事务提交

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值