【问题标题】:Resetting database record Id after delete删除后重置数据库记录ID
【发布时间】:2017-06-09 08:29:05
【问题描述】:

我目前正在使用一个包含大约 10.000 多条记录并且还在不断增长的数据库。这是一个带有维护日志的数据库,我在其中执行一些分析以提取有关维护的一些数据。分析结果存储在同一个数据库的不同表中。

维护表:

------------------------------------------
|id      remainingdata
|1       testing
|2       alsotesting
|3       testing1

分析结果表:

------------------------------------------
|id      maintenanceid      remainingdata
|1       1                  result1
|2       1                  result2
|3       2                  result3
|4       3                  result4
|5       3                  result5

执行分析后可以更新日志记录,因此可以重新进行分析。当重新分析维护记录时,所有分析记录(包含维护记录的外键)都将从表中删除并重新输入。因此,假设我重新分析了所有 3 条维护记录。我的结果表现在看起来像这样;

------------------------------------------
|id      maintenanceid      remainingdata
|6       1                  result1
|7       1                  result2
|8       2                  result3
|9       3                  result4
|10      3                  result5

我面临的问题是,当每周可能删除并输入 10.000 多条记录时,AUTO_INCREMENT 数字很快就会变得非常高。因为我想在未来证明我的数据库,所以我需要找到解决这个问题的方法。

注意:结果表中的 id 仅用于保留重复项,其他表中没有对它们的引用。

我自己已经想到了两种可能的解决方案,它们都有优点和缺点;

  1. 将 Pk 更改为 BIGINT 并希望它不会达到最大值

虽然最大值非常大,但将来仍有可能达到它,我真的不想冒这种风险。

  1. 删除任何记录后,将AUTO_INCREMENT 重置为TOP(id)

这对我来说似乎是最好的解决方案,但如果有反对它的论据我很感兴趣,这会将 id 值重置为当前表中的最大 id,如果重新分析所有记录,它将返回1.

我想知道关于我的解决方案的意见是什么,或者是否有人对此问题有更好的解决方案。 提前致谢

【问题讨论】:

  • 您不能使用 TRUNCATE TABLE 选项重置 AUTO_INCREMENT 列吗?
  • @Sujith 并非总是删除所有记录,有时只有 1 或 2 条记录

标签: mysql database primary-key uniqueidentifier


【解决方案1】:

寻求BIGINT 解决方案。真的。

未签名的BIGINT 可以hold numbers 和 9223372036854775807 一样大。

以每周 10k 的预期速度,这意味着您的申请在 922337203685477 周,或 17737253917028 年,或 221715673962 人的生命周期内是未来的证明,预计每人的年龄约为 80 岁。这大约是世界人口的三倍。

未来仍有被击中的风险,我真的不想冒这个风险

你可以很确定,当达到极限时,你的生命就结束了,解决问题的任务是给别人的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-04
    • 2015-12-03
    • 2021-02-23
    • 2018-04-09
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2019-06-03
    相关资源
    最近更新 更多