关于undo日志

关于undo日志

对于同一张表,事物与事物之间是共用undo日志的吗

正在回答

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

3回答

同学你好,

1、开启事务后,并没有拷贝表数据。只有在执行查询语句的时候,Mysql才会把查询语句用到的数据载入undo日志。

2、在视频12:14处,老师在第二个面板中设置了隔离界别为repeatable read,执行了start transaction开启事务后,并没有执行下面的select语句(所以undo日志中没有原始数据),而是到第一个面板中执行了commit;语句。

这时候,再到第二个面板中执行select语句,由于undo日志中没有原始数据,所以查询到的是更新后的数据。

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

  • 焱羿 提问者 #1
    既然开启事务后,并没有拷贝表数据,那老师你为啥说这句话是对的: “手动开始事物后,undo日志会拷贝数据” 而且你还说 ”START TRANSACTION;语句就是在开启事务“
    2020-08-19 10:48:24
  • 好帮手慕阿慧 回复 提问者 焱羿 #2
    同学你好,非常抱歉,之前是老师没有仔细看同学的问题。 1、"手动开始事物后,undo日志会拷贝数据"这句话是错误的。应该是:手动开始事物后,undo日志不会拷贝数据,只有执行查询语句的时候,undo日志才会拷贝数据。 2、START TRANSACTION;语句是在开启事务,这句话是正确的。其中start是开始的意思,transaction是事务的意思。 祝学习愉快~
    2020-08-19 16:04:45
好帮手慕阿慧 2020-08-18 19:04:45

同学你好,同学首先需要了解一下什么是事务:事务是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务可以使数据能够正确地提交到数据库中。同学可以把事务理解为完成一件事所要做的一系列事情。

手动开启事务后进行的一系列操作可以提交到数据库也可以回滚。START TRANSACTION;语句就是在开启事务。

祝学习愉快~

  • 提问者 焱羿 #1
    START TRANSACTION;语句就是在开启事务,那么这时候事物的undo日志就拷贝了表数据,那为什么视频13分半左右老师说因为第二个查询面板里没有执行select语句,所以第二个查询面板中的undo日志并没有原始数据
    2020-08-18 19:38:55
好帮手慕阿慧 2020-08-18 14:14:00

同学你好,是的。undo日志有几种类型,插入数据、删除数据、更新数据都会产生不同的undo log,记录有一个roll_pointer的指针指向它的undo log,所有关于这条记录的undo log都连成一条链表,称为版本链,根据undo log的事务ID来判断是哪个事务中修改了该记录,事务回滚时找到对应事务ID的undo log恢复数据。

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

  • 提问者 焱羿 #1
    根据undo log的事务ID来判断是哪个事务中修改了该记录,事务回滚时找到对应事务ID的undo log恢复数据。 这句话的意思是每个事物在undo日志中都有自己的拷贝数据吗?
    2020-08-18 14:26:57
  • 好帮手慕阿慧 回复 提问者 焱羿 #2
    同学你好,同学理解是正确的,继续加油!祝学习愉快!
    2020-08-18 14:47:21
  • 提问者 焱羿 回复 好帮手慕阿慧 #3
    老师,帮我看看下面这三句话有没有问题: 执行查询语句时会把查询语句用到的数据载入undo日志 手动开始事物后,undo日志会拷贝数据 commit提交后,undo日志也会拷贝数据
    2020-08-18 14:57:07
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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