事务里面如果执行了一半,由于某些原因需要回滚到事务开始的状态,mysql底层具体是怎么实现的呢?

事务里面如果执行了一半,由于某些原因需要回滚到事务开始的状态,mysql底层具体是怎么实现的呢?

数据库事务里面如果执行了一半,由于某些原因需要回滚到事务开始的状态,mysql底层具体是怎么实现的呢?麻烦老师给详细解答下,不要复制网上的链接哦

正在回答

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

2回答

同学你好。这里老师说的有点儿模糊,所谓“缓存”是运行内存中开辟的一块儿空间。所谓的“缓存存入内存中”就是记录操作日志的过程。同学可以类比输入输出流。写文件的过程,中间就需要一个“缓存数组”,一边接受输入流的输入,一边向输出流输出。

例如下面的案例,fis可以看做是记录操作流,fos是输出日志流,那么b就是临时开辟的缓存空间:

http://img1.sycdn.imooc.com//climg/5d82e5e5096f841404910253.jpg

在这种情况下断电是不会影响数据库中的数据的,虽然b丢失,日志也记录不完整。但因为这个过程中还没有开始实质上操作数据,只要丢弃这份不完整的日志文件即可达到“回滚”的效果。

如果解答了同学的疑问,望采纳~

祝学习愉快~

芝芝兰兰 2019-09-18 15:41:11

同学你好。MySQL是通过缓存来实现的。

在开启事务的状态下,事务中的每一步操作和操作前的状态都会先写到缓存中去,在事务提交之前这些操作状态信息都已经存入内存。

在事务提交之后,数据才根据这些操作信息操作数据库。如果这期间数据库崩溃或者主机停机,当重启时或者进行恢复时,可以根据缓存中记录的内容,将数据库恢复到之前的状态。

底层实现同学不需要过于纠结,学习是先易后难逐步深入的,想要完全理解不光是需要当前的知识,更需要综合能力。思而不学则殆,在熟练使用之前就去深入底层只会越学越迷糊哦~

祝学习愉快~


  • 提问者 慕仔3163040 #1
    老师你好,你这里所说的缓存是计算机的运行内存吗?运行内存中的数据在系统突然掉电的话,里面的数据会丢失的,数据库就没办法根据这里面的数据进行回滚了吧?
    2019-09-18 20:16:55
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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