gpt4 book ai didi

MySQL AUTO_INCREMENT 不回滚

转载 作者:IT老高 更新时间:2023-10-28 12:54:06 26 4
gpt4 key购买 nike

我正在使用 MySQL 的 AUTO_INCREMENT 字段和 InnoDB 来支持事务。我注意到当我回滚事务时,AUTO_INCREMENT 字段没有回滚?我发现它是这样设计的,但是有什么解决方法吗?

最佳答案

它不能那样工作。考虑:

  • 程序一,您打开一个事务并插入一个具有 autoinc 主键的表 FOO(我们随意地说它的键值为 557)。
  • 程序二启动,它打开一个事务并插入表 FOO 得到 558。
  • 将两个插入编程到表 BAR 中,该表有一列是 FOO 的外键。所以现在 558 位于 FOO 和 BAR 中。
  • 程序二现在提交。
  • 程序三启动并从表 FOO 生成报告。打印 558 记录。
  • 之后,程序一回滚。

数据库如何回收 557 值?它是否进入 FOO 并减少所有其他大于 557 的主键?它如何修复 BAR?报告程序三输出上打印的558如何删除?

出于同样的原因,Oracle 的序列号也独立于事务。

如果你能在不断的时间内解决这个问题,我相信你可以在数据库领域赚到很多钱。

现在,如果您要求您的自动增量字段永远不会有间隙(例如,出于审计目的)。然后你不能回滚你的交易。相反,您需要在您的记录上有一个状态标志。在第一次插入时,记录的状态为“未完成”,然后您开始事务,完成您的工作并将状态更新为“竞争”(或您需要的任何内容)。然后,当您提交时,记录就会生效。如果事务回滚,不完整的记录仍然存在以供审计。这会给您带来许多其他麻烦,但这是处理审计跟踪的一种方法。

关于MySQL AUTO_INCREMENT 不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/449346/

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