MySQL事务的底层实现原理

MySQL事务的作用呢,就是要保证数据库的可靠性、一致性、并发处理。那实现事务需要三个技术,分别是日志文件,包括redo log 和 undo log、锁技术、MVCC。

那什么是redo log呢,redo log是用来记录已提交事务的修改语句的,因为数据库为了保证效率,每次修改操作,并不会马上落盘,而是会先存放到内存缓冲区中,这样的话就有一个问题,当服务器宕机的时候,内存数据就没了,这时候就用到了redo log,它可以保障已提交事务的持久化特性。

那什么是undo log呢,undo log是用来记录数据被修改前的信息,当发生回滚时,可以根据undo log回滚到没被修改之前的状态。

锁技术是指读写锁,通过读写锁,可以做到读读可以并行,但是不能做到写读,写写并行。

MVCC (MultiVersion Concurrency Control) 叫做多版本并发控制,InnoDB的 MVCC ,是通过在每行记录的后面保存两个隐藏的列来实现的,这两个列,一个保存了行的创建时间,一个保存了行的过期时间,当然存储的并不是实际的时间值,而是系统版本号,他的主要实现思想是通过数据多版本来做到读写分离。从而实现不加锁读进而做到读写并行.。

MVCC在mysql中的实现依赖的是undo log与read view,undo log 中记录的是某行数据的多个版本的数据。read view 用来判断当前版本数据的可见性。

事务有四个特性,分别是

  • 原子性(Atomicity)

  • 一致性(Consistency)

  • 隔离型(Isolation)

  • 持久性(Durability)

那MySQL是怎么保证这4个特性的呢

  • 原子性:使用 undo log ,从而达到回滚
  • 持久性:使用 redo log,从而达到故障后恢复
  • 隔离性:使用锁以及MVCC,运用的优化思想有读写分离,读读并行,读写并行
  • 事务的终极大 boss 一致性是通过原子性,持久性,隔离性来实现的!!!通过回滚,以及恢复,和在并发环境下的隔离做到一致性。

原子性,持久性,隔离性的目的也是为了保障数据的一致性!

总之,ACID只是个概念,事务最终目的是要保障数据的可靠性,一致性。

参考

  1. MySQL事务的底层实现原理_xlshi1996的博客-CSDN博客
  2. mysql事务底层实现原理 - 百度文库

猜你喜欢

转载自blog.csdn.net/qq_40382400/article/details/132154545