【问题标题】:How can I handle the problem whe AUTO_INCREMENT hit its limit?当 AUTO_INCREMENT 达到极限时,我该如何处理?
【发布时间】:2009-11-03 11:56:47
【问题描述】:

这方面有什么好的做法吗?

我希望我能在主键达到限制时解决问题,而 not 来避免它。因为这是在我的具体问题中会发生的事情。

如果这是不可避免的......我该怎么办?

这是mysql的问题,有没有Sybase sql一样的问题?

【问题讨论】:

    标签: mysql limit auto-increment


    【解决方案1】:

    你为什么要达到那个领域的极限?如果您使用足够大的数据类型定义它,它应该能够保存您的所有记录。

    如果您使用无符号 bigint,则最多可以有 18,446,744,073,709,551,615 条记录!

    【讨论】:

      【解决方案2】:

      你应该为主键选择正确的类型,如果你知道你会有很多行,你可以使用 bigint 而不是常用的 int。

      在mysql中你可以很容易地用alter table语句调整主键列来调整范围。
      您还应该在该列上使用 unsigned 属性,因为自动递增主键始终为正数。

      当达到限制时,您可以创建一些算法来放入 INSERT 的 ON DUPLICATE KEY UPDATE 语句中

      【讨论】:

        【解决方案3】:

        嗯,取决于自动增量列的数据类型。
        Unsign int 上升到 4294967295。

        如果要防止出错,可以查看value last autoincrement value:LAST_INSERT_ID()

        如果它接近数据类型的最大值,要么不允许插入,要么以其他方式处理。

        除此之外,我只能建议你使用 bigint,这样在大多数情况下你几乎不会达到最大值。

        虽然不能给你一个万无一失的答案:)

        【讨论】:

          【解决方案4】:

          我知道这个问题可能太老了,但我也想回答。

          实际上不可能使这种情况不可避免。刚过 认为存储驱动器的数量存在物理限制 人类能够制造。但这肯定不太可能发生 填满所有可用的存储空间。

          正如其他人告诉你的那样,UNSIGNED BIGINT 最多可以处理18,446,744,073,709,551,615 记录,这可能是“大多数” 情况下的方法。

          这是另一个想法:通过触发数据库的记录数(例如,85% 已满),您可以将该表备份到另一个表/区域/数据库中,并相应地扩展您的基础架构。然后重置那个初始表。

          我的最后一种方法是:一些公司选择对其许可和使用协议进行微小的更改,如果用户在一定时间内未登录(例如,免费用户 6 个月),他们将关闭帐户,专业用户 6 年,终极用户 60 年...

          希望有人觉得这很有用。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-05-09
            • 2019-08-18
            • 2021-03-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多