MYSQL学习笔记之简单的UPDATE语句(二)

本文解析了MySQL中事务处理的细节,包括WAL技术、两阶段提交协议以及binlog和redolog的作用,阐述了如何确保数据库在异常重启后的数据一致性。

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

声明:本文章内容是根据极客时间中林晓斌的课程《MYSQL45讲》,经过学习,加以自己的理解形成的笔记。具体原文可以到官网进行阅读。如有侵权请,告知删除。

UPDATE t SET name = jack WHERE id = 1这是一个简单的更新语句,它会如同查询语句一样,经过流程,连接器,分析器,优化器,执行器。它首先会查看内存中是否有 id为1的数据 如果有的话,那么就会更新返回。更新操作会清除该条记录的缓存

1.WAL 技术

WAL他的全称 WRITE-Ahead Logging,他的特点就是 先记录日志,再写磁盘。

2.日志模块

MYSQL的日志分为两个方面。
server层: binlog日志(归档日志)binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。
引擎层: redo log 是 InnoDB 引擎特有的,redo log 是物理日志,记录的是“在某个数据页上做了什么修改”

2.1为什么要两份日志呢?

InnoDB 是另一个公司以插件形式引入 MySQL 的,既然只依靠 binlog 是没有 crash-safe 能力的,所以 InnoDB 使用另外一套日志系统——也就是 redo log 来实现 crash-safe 能力。

3.如何实现 crash-safe

crash-safe 就是 即使数据库发生异常重启,提交过的记录都不会丢失。具体实现是通过 redo-log的两段提交协议。记录日志的过程是:
1.记录redo log 处于 prepare状态
2.记录binlog 写入磁盘
3.redo改成 commit状态,更新完成

1 prepare阶段 2 写binlog 3 commit
当在2之前崩溃时
重启恢复:后发现没有commit,回滚。备份恢复:没有binlog 。
一致
当在3之前崩溃
重启恢复:虽没有commit,但满足prepare和binlog完整,所以重启后会自动commit。备份:有binlog. 一致

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值