数据库 -> ACID靠什么保证的?

ACID靠什么保证的?

原子性

  • 原子性是由 undolog 日志来保存的,它记录了需要回滚的日志信息。
  • 事务回滚时,撤销已经执行成功的 SQL 语句,什么意思?
  • 我们做增、删、改这样一些 SQL 操作,它之前已经保留好一个历史版本数据了,而这个历史版本数据会存在于 undolog 中
    • 我们写一条insert,就会记录一条delete
  • 所以当你进行回滚的时候,它会找到你对应的一个历史版本数据
  • 然后进行回写,把之前成功执行的 SQL 语句给你撤销掉,这个时候就完成了最基本的一个回滚操作,这是原子性对应的一个保证。

持久性

  • 持久性是用什么来保证的?持久性由 redolog来进行保证
  • 当我们要修改数据时,MySQL是先把这条记录所在的「页」(也就是B+树上的叶子节点)找到,然后把该页加载到内存中,在内存中进行修改。
  • 还会写一份redo log,这份redo log记载着这次在某个页上做了什么修改、执行了什么sql。
  • 即便MySQL在中途挂了,我们还可以根据redo log来对数据进行恢复。

隔离性

  • 什么叫隔离性?
  • 我们要保证我事务之间彼此是不会受相互打扰的,每个事务跟每个事务都是相互隔离的。
  • 因此,这个时候需要通过 MVCC 技术来进行实现。
  • MVCC 是多版本并发控制,这种技术非常麻烦,它包含了非常多的信息。
  • 隔离性是由 MVCC 来保证 -> 出现了RR、RC的隔离情况

一致性

  • 一致性就是事务的目的所在
  • 前面的保证原子性、持久化、隔离性都是为了保证一致性

猜你喜欢

转载自blog.csdn.net/rod0320/article/details/123513630
今日推荐