gpt4 book ai didi

MySQL 事务以及回滚如何工作?

转载 作者:IT王子 更新时间:2023-10-29 00:30:56 26 4
gpt4 key购买 nike

我刚刚遇到交易,我想知道

  1. 使用它的优缺点是什么,
  2. 回滚是如何工作的,旧值是否保留在内存中,如果更大,会发生什么?

对于 1. 我知道您必须将它用于银行转账,但是将它用于所有事情不是更好吗?!?

最佳答案

事务的好处是执行复杂的更改,这可能需要对不同的表进行多次更新,并确保它们都会成功或全部回滚。

这方面的术语是原子,即变化不能再分割。

事实上,MySQL 的默认存储引擎 InnoDB 对所有事情都使用事务,无论您是否请求。但是大多数人使用一种称为 autocommit 的模式,其中每个语句隐式启动事务并在语句完成后立即隐式提交。在自动提交模式下,您没有机会选择回滚。要么语句成功,要么如果遇到错误则自动回滚。

如果您启动显式事务,执行一些更新,然后回滚,InnoDB 将恢复数据的原始状态。它通过将原始数据存储在称为回滚段的数据库区域中来保留原始数据。因此,如果您回滚,它只会重新复制那些数据页面以替换您更改的数据。

这可能需要一些时间,因此如果您尝试查询已更改但回滚的数据,InnoDB 会自动绕道从回滚段中读取原始数据,直到将其重新合并到表格。

假设您启动了一个事务,并更新了十亿行。这会将原始行的许多页面复制到回滚段,然后用更改的数据填充表 - 但更改的数据未提交。没有人应该能够读取未提交的数据,因此任何人查询该表都会自动从回滚段中获取原始数据。

然后你回滚你的事务。在接下来的几分钟内,InnoDB 逐渐清理,最终一切都恢复同步。但在此期间任何人都可以继续查询原始数据。

如果您已经提交了事务,那么 MySQL 只会将所有更改的数据标记为已提交,随后读取数据的任何人都不会遇到从回滚段读取的轻微开销。

关于MySQL 事务以及回滚如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21057314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com