如果事务里面的步骤执行到一半,突然机器断电了怎么办呢?

如果事务里面的步骤执行到一半,突然机器断电了怎么办呢?

如果事务里面的步骤执行到一半,突然机器断电了怎么办呢?mysql还能自动回滚吗?比如数据库里面已经有被更新的记录了,事务还没做完但是机器突然断电了,这个时候数据库里面不就产生了永久的脏数据了吗

正在回答

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

1回答

同学你好。可以自动回滚的。所谓的执行一半可能有两种情况:

1、在开启事务的状态下,事务中的每一步操作和操作前的状态都会先写到缓存中去,在事务提交之前,缓存的内容需要存入内存。如果在这时断电,数据库中的数据实际上并没有改变。而这份不完整的缓存记录会被认为失效。

2、在事务提交之后,根据缓存记录的操作对数据进行更改过程中断电,这时之前的缓存记录派上了用场,开启事务回滚后,会根据记录自动地将数据改变为之前的状态。

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

祝学习愉快~

  • 慕仔3163040 提问者 #1
    老师你好,你这里说的缓存是谁的缓存?是数据库的缓存吗?数据库的缓存中记录的操作记录会实时的记录到自己的日志文件中吗?以及你说的再记录到内存中是什么意思?为什么要往内存中在刷一份数据呢?
    2019-09-18 20:27:47
  • 芝芝兰兰 回复 提问者 慕仔3163040 #2
    同学你好。可以看做是写“数据库缓存日志”的过程,它实质上是就是一个从内存中写文件到磁盘的操作。在内存中的记录断电会消失,但磁盘中的内容断电是不会丢失的。内存到磁盘的这个过程就是上述1的过程。而日志记录到磁盘后才会执行事务提交,在事务提交之后才会读这个日志操作数据库中的数据,也就是2过程。所以1过程实际上不涉及数据库中真正的数据,只有日志文件如何处理的问题。
    2019-09-19 10:36:29
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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