MySQL基础--事务原理,MVCC

事务原理

        事务是一组操作的集合,是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

特性:

原子性:事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

一致性:事务完成时,必须使所有的数据保持一致的状态。

隔离性:数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

持久性:事务一旦提交或者回滚,对数据库的数据的改变是永久的。

redo log

        重做日志,记录的是事务提交时数据页的物理修改,是用来实现事物的持久性。

该日志文件由两部分组成:重做日志缓冲,以及重做日志文件,前者是在内存中,后者是在磁盘中,当事务提交之后,会把所有修改信息都存在该日志文件中,用于在刷新脏页到磁盘,发生错误时,进行数据恢复使用。

undo log

        回滚日志,用于记录数据被修改前的信息,作用有两个:提供回滚和MVCC。

undo log 是逻辑日志。可以认为当 delete 一条记录时,undo log 中会记录一条对应的 insert 记录,反之亦然,当 update 一条记录时,他记录一条对应相反的 update 记录,当执行 rollback 时,就可以从 undo log 中的逻辑记录读取到相应的内容并进行回滚。

Undo log 销毁:undo log 在事务执行时产生,事务提交时,并不会立即删除 undo log,因为这些日志可能还用于 MVCC。

Undo log 存储:采用段的方式进行管理和记录,存放在前面介绍的 rollback segment 回滚段中,内部包含 1024个 rollback segment。

MVCC--基本概念

当前读

        读取的是记录的最新版本,读取时还要保证其他并发事务不能修改当前记录,会对读取的记录进行加锁,对于我们的日常操作,如:select...lock in share mode(共享锁),select...for update,update,insert,delete(排它锁)都是一种当前读。

快照读

        简单的 select (不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。

Read Committed:每次 select 都生成一个快照读。

Repeatable Read:开启事务后第一个 select 语句才是快照读的地方。

Serializable:快照读会退化为当前读。

MVCC

        多版本并发控制,指维护一个数据的多个版本,使得读写操作没有冲突,快照读为 MySQL 实现 MVCC 提供了一个非阻塞功能。MVCC的具体实现,还需要依赖于数据库记录中的三个隐式字段,undo log 日志,readView。

记录中的隐藏字段

undo log 版本链

        不同事务或相同事务对同一条记录进行修改,会导致该记录的 undo log 生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。

ReadView 是快照读 SQL 执行时 MVCC 提取数据的依据,记录并维护系统当前活跃的事务(未提交的)id。包含四个字段:

MySQL 管理

        MySQL 安装完成之后自带四个数据库

Ending: 

        OK,本篇文章就到此结束了,非常感谢你能看到这里,所以如果你觉得这篇文章对你有帮助的话,请点一个大大的赞,支持一下博主,若你觉得有什么问题或疑问,欢迎私信博主或在评论区指出~

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值