MySQL事务的实现原理

MySQL事务的实现原理

首先我们要知道事务的特性(ACID)

  • 原子性(Atomicity)
    原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。比如在同一个事务中的SQL语句,要么全部执行成功,要么全部执行失败。

  • 一致性(Consistency)
    官网上事务一致性的概念是:事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

  • 隔离性(Isolation)
    事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

  • 持久性(Durability)
    持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

然后我们需要了解什么是undo log、redo log、读、写锁、MVCC

  • undo log(回滚日志)
    用于记录数据被修改前的信息,主要记录的是数据的逻辑变化,每次写入数据或者修改数据之前都会把修改前的信息记录到 undo log,目的是为了在发生错误时回滚。

  • redo log(重做日志)
    该日志文件由两部分组成:重做日志缓冲(redo log buffer)以及重做日志文件(redo log),前者是在内存中,后者在磁盘中。当事务成功提交之后会把所有修改信息都会存到该日志中。

  • 读、写锁(共享、排他锁)
    读锁是可以共享的,或者说多个读请求可以共享一把锁读数据,不会造成阻塞;写锁会排斥其他所有获取锁的请求,一直阻塞,直到写入完成释放锁。

  • MVCC (MultiVersion Concurrency Control) 多版本并发控制
    InnoDB的 MVCC ,是通过在每行记录的后面保存三个隐藏的列来实现的。即DB_TXR_ID事务id、DB_ROLL_PTR回滚指针、DB_ROW_ID行号
    主要实现思想是通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行。
    MVCC在mysql中的实现依赖的是undo log与read view,通过读写锁来控制,其只在RR/RC隔离级别下工作

undo log :undo log 中记录某行数据的多个版本的数据。
read view :用来判断当前版本数据的可见性

事务的实现

前面讲的重做日志,回滚日志以及锁技术就是实现事务的基础。

  1. 事务的原子性是通过 undo log 来实现的

  2. 事务的持久性性是通过 redo log 来实现的

  3. 事务的隔离性是通过 (读写锁+MVCC)来实现的

  4. 一致性是通过原子性,持久性,隔离性来实现的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值