代码之家  ›  专栏  ›  技术社区  ›  slypete

当ID自动递增溢出时,MySQL会做什么?

  •  5
  • slypete  · 技术社区  · 15 年前

    我有一个django应用程序,它使用mysql作为数据库后端。它已经运行了几天了,有些桌子上的身份证已经高达5000。

    我担心当我溢出数据类型时会发生什么。

    有没有办法告诉自动增量在某一点重新开始?我的数据非常不稳定,所以当我溢出ID时,ID 0或其附近的任何地方都无法继续使用。

    2 回复  |  直到 15 年前
        1
  •  5
  •   AvatarKava    15 年前

    根据您使用的是无符号整数还是不使用无符号整数,以及运行的MySQL的版本,您将运行这样一个机制:获取主键的令人讨厌的负值,或者(更糟的是)该行不会被插入,并将抛出一个错误。

    也就是说,使用alter命令可以很容易地更改MySQL中整数的大小/类型,从而提前阻止这种情况的发生。作为主键使用的int的“标准”大小是int(11),但绝大多数db应用程序不需要这么大的值。试试医生。

    Mediumint-符号范围为“8388608至8388607”。无符号范围是0到16777215

    与…相比

    int或integer-带符号的范围是2147483648到2147483647。无符号范围是0到4294967295

    还有一个重要的问题,但是老实说,如果您有一个表的行数超过20亿,那么您可能会遇到比数据类型更大的可伸缩性问题。

        2
  •  -3
  •   Michael Borgwardt    15 年前

    好吧,默认的32位int会增加到20亿左右。以每天5000个ID的速度,大约1000年后就会溢出。我想你还不用担心…