登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
轻量养虾,开箱即用!低 Token + 稳定算力,Gitee & 模力方舟联合出品的 PocketClaw 正式开售!点击了解详情
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
3
Star
47
Fork
22
DreamCoders
/
CoderGuide
代码
Issues
1169
Pull Requests
0
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
开发画像分析
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
undo log 具体怎么回滚事务 ?
待办的
#IAJKZF
陌生人
拥有者
创建于
2024-08-13 10:10
<p>在数据库中,当一个事务需要回滚时,数据库系统会利用 Undo 日志(Undo log)来实现事务的回滚操作。Undo 日志记录了事务执行过程中对数据所做的修改操作的逆操作,以便在事务回滚时可以正确地撤销这些修改。</p><p>下面是 Undo 日志是如何回滚事务的简要步骤:</p><ol><li style="text-align: left;">识别事务范围: 当一个事务开始时,数据库系统会为该事务分配一个唯一的事务 ID,并标记所有该事务所做的修改操作所在的 Undo 日志范围。</li><li style="text-align: left;">记录修改操作: 在事务执行过程中,每个修改操作都会记录在 Undo 日志中,包括修改的数据页、修改前后的数据值等信息。</li><li style="text-align: left;">撤销修改操作: 当需要回滚事务时,数据库系统会逆序遍历该事务的 Undo 日志记录。对于每一条修改操作,数据库系统会执行相应的逆操作,将数据恢复到事务开始之前的状态。</li><li style="text-align: left;">释放 Undo 日志空间: 在回滚操作完成后,数据库系统会释放该事务所占用的 Undo 日志空间,以便后续的事务使用。</li></ol><p style="text-align: left;"><br></p><p>举个例子:<br>⚫ 对于 insert 类型的 sql,会在 undo log 中记录下方才你 insert 进来的数据的 ID,当你想<br>roll back 时,根据 ID 完成精准的删除。<br>⚫ 对于 delete 类型的 sql,会在 undo log 中记录方才你删除的数据,当你回滚时会将删除<br>前的数据 insert 进去。<br>⚫ 对于 update 类型的 sql,会在 undo log 中记录下修改前的数据,回滚时只需要反向<br>update 即可。<br>⚫ 对于 select 类型的 sql,别费心了,select 不需要回滚。</p><p style="text-align: left;">需要注意的是,Undo 日志的使用可以实现数据库的事务回滚功能,但同时也增加了系统的开销,包括存储空间的占用和回滚操作的执行时间。因此,在设计数据库系统时,需要权衡 Undo 日志的使用和性能开销,并根据具体的应用场景进行优化。</p>
<p>在数据库中,当一个事务需要回滚时,数据库系统会利用 Undo 日志(Undo log)来实现事务的回滚操作。Undo 日志记录了事务执行过程中对数据所做的修改操作的逆操作,以便在事务回滚时可以正确地撤销这些修改。</p><p>下面是 Undo 日志是如何回滚事务的简要步骤:</p><ol><li style="text-align: left;">识别事务范围: 当一个事务开始时,数据库系统会为该事务分配一个唯一的事务 ID,并标记所有该事务所做的修改操作所在的 Undo 日志范围。</li><li style="text-align: left;">记录修改操作: 在事务执行过程中,每个修改操作都会记录在 Undo 日志中,包括修改的数据页、修改前后的数据值等信息。</li><li style="text-align: left;">撤销修改操作: 当需要回滚事务时,数据库系统会逆序遍历该事务的 Undo 日志记录。对于每一条修改操作,数据库系统会执行相应的逆操作,将数据恢复到事务开始之前的状态。</li><li style="text-align: left;">释放 Undo 日志空间: 在回滚操作完成后,数据库系统会释放该事务所占用的 Undo 日志空间,以便后续的事务使用。</li></ol><p style="text-align: left;"><br></p><p>举个例子:<br>⚫ 对于 insert 类型的 sql,会在 undo log 中记录下方才你 insert 进来的数据的 ID,当你想<br>roll back 时,根据 ID 完成精准的删除。<br>⚫ 对于 delete 类型的 sql,会在 undo log 中记录方才你删除的数据,当你回滚时会将删除<br>前的数据 insert 进去。<br>⚫ 对于 update 类型的 sql,会在 undo log 中记录下修改前的数据,回滚时只需要反向<br>update 即可。<br>⚫ 对于 select 类型的 sql,别费心了,select 不需要回滚。</p><p style="text-align: left;">需要注意的是,Undo 日志的使用可以实现数据库的事务回滚功能,但同时也增加了系统的开销,包括存储空间的占用和回滚操作的执行时间。因此,在设计数据库系统时,需要权衡 Undo 日志的使用和性能开销,并根据具体的应用场景进行优化。</p>
评论 (
0
)
登录
后才可以发表评论
状态
待办的
待办的
进行中
已完成
已关闭
负责人
未设置
标签
MySql
未设置
标签管理
里程碑
未关联里程碑
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (
-
)
标签 (
-
)
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
参与者(1)
1
https://gitee.com/DreamCoders/CoderGuide.git
git@gitee.com:DreamCoders/CoderGuide.git
DreamCoders
CoderGuide
CoderGuide
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册