mysql事务

本文详细介绍了数据库事务的ACID特性,包括原子性、一致性、隔离性和持久性,并探讨了日志系统中的binlog、undolog、redolog等在事务管理中的作用。同时,解释了MVCC多版本并发控制如何解决并发读写问题,以及事务的读写类型和可见性算法。还涉及了二阶段提交的db更新执行流程。

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

事务特点:ACID(原子性、一致性、隔离性、持久性)
日志系统:

  • binlog(二进制日志:数据同步及恢复;server层)
  • undolog(回滚日志;innodb)
  • redolog(前滚日志;innodb)
  • errorlog(错误日志)
  • showlog(慢日志)
  • relaylog(中继日志)

实现方式:

  1. 原子性:undolog( 利用undolog来实现)
  2. 隔离性:锁,mvcc
  3. 持久性:redolog
  4. 一致性:由其他3个决定

db更新执行流程(二阶段提交)
db更新执行流程
mvcc:多版本并发控制
并发情况:

  • 读读:没问题,不需要并发控制
  • 读写:数据安全问题,脏读、幻读、不可重复读
  • 写写:数据安全问题,数据丢失

当前读:读取最新版本的数据(select … lock in share mode,select … for update,update,delete,insert)
快照读:历史版本数据(就是单纯的 SELECT 语句)

mvcc的3部操作
隐藏字段:

  • DB_TRX_ID:创建这条记录的id或者最后修改这条数据事物的id(事务操作时,事务Id是递增的)
  • DB_ROLL_PTR:回滚指针,指向上一条数据
  • DB_ROW_ID:隐藏主键,如果没有显示主键的话,就会多一个隐藏主键

在这里插入图片描述
undolog:回滚日志(历史版本数据)
在这里插入图片描述在这里插入图片描述
事务3更新,age=21
在这里插入图片描述readview: 事务进行快照读的时候产生的读视图

  • TRX_LIST:readview生成时刻当前系统活跃的事物id
  • UP_LIMIT_ID:活跃列表中最小的事务id值
  • LOW_LIMIT_ID:系统尚未分配的下一个事务id的值

可见性:根据可见性算法来判断是否可以读取到对应的数据
在这里插入图片描述

结论
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值