关于undo日志

关于undo日志

事务开始后,如何不执行查询语句,undo就不会拷贝当前的数据表吗?


正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,1. 关于“手动开始事物后,undo日志会拷贝数据”老师在2-1五分钟左右有进行讲解,同学可以进行详细查看。

2 undo日志用于存放数据被修改前的值,如果一个事务做回滚或某种原因执行失败了,需要根据undo日志中记录的原数据做数据恢复。

3. 事物反复读取的数据,是从undo日志中读取的,只不过不同的是修改前还是修改后的数据。

祝学习愉快!

  • 焱羿 提问者 #1
    我总结下我的理解您帮我看看有没有问题: 手动开始事物后,undo日志会拷贝数据 commit提交后,undo日志也会拷贝数据 事物反复读取的数据,是从undo日志中读取的,所以在另一个事物commit之前,我需要先用一个select语句从undo日志中读取数据,不然等另一个事物commit之后,undo日志就被修改了,这时候我再去读取数据就会读到修改后的数据
    2020-08-18 10:42:09
  • 好帮手慕小尤 回复 提问者 焱羿 #2
    同学你好,同学理解是正确的,继续加油!祝学习愉快!
    2020-08-18 11:59:46
好帮手慕小尤 2020-08-17 19:14:45

同学你好,undo日志用于存放数据修改被修改前的值,而第一个事务在第二个事务执行select查询之前已经commit提交了,所有在第二个事务中执行select时是修改之后的数据。所以在课程中需要先执行SELECT语句。

祝学习愉快

  • 提问者 焱羿 #1
    视屏中说: 执行查询语句时会把查询语句用到的数据载入undo日志 你的意思中: 手动开始事物后,undo日志会拷贝数据 commit提交后,undo日志也会拷贝数据 那么我想知道事物反复读取的数据是从哪获取的,请老师帮我捋一捋,有点乱
    2020-08-17 19:46:28
好帮手慕小尤 2020-08-17 16:59:35

同学你好,手动开始事务后,mysql数据库会在修改之前先把数据拷贝过去。数据的拷贝是底层实现的,不需要同学自己必须先执行sql的查询。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 焱羿 #1
    那为什么视频14分11秒的时候说要提前执行SELECT语句才能在repeatable read事物隔离等级下重复访问原先的数据
    2020-08-17 17:04:36
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师