在mySQL数据库中新建了一个表,ID为主键,自增加。数据类型设置的是int.现在我想知道,由于数据量很大,每天都会添加和删除一批数据,但自增加的ID一直在增加,删除的ID都不能重新利用吗?如果ID列一直增加,那有一天ID值超过了int的最大数值怎么办?这个问题一般是如何解决的呢?
首先明确答复你:超过之后会从0开始编码。下面以表示范围更小的单字节类型为例子说明,如果是有符号数据类型,首先从0开始编码,到127的时候就是最大,下一个数将是-128,随后-127、-126,直到0以后,又会从1开始编码。如果是无符号类型,那么会从0开始到256结束,然后又从0开始编号。上面可能有点糊涂,但是仔细看的话,我相信你能明白。其次我告诉你:你应该选择足够大的数据类型,为了防止数据重复,你可以让你的程序在未来的十年都不会因为这样的问题成为缺陷,下面是MYSQL各数据类型表示的范围:类型 字节 带符号的范围 无符号的范围 TINYINT 1 -128~127 0~ 255 SMALLINT 2 -32768~ 32767 0~ 65535 MEDIUMINT 3 -8388608~8388607 0~ 16777215 INT 4 -2147483648~2147483647 0~ 4294967295 BIGINT 8 -9223372036854775808~ 9223372036854775807 0~ 18446744073709551615不直到你的业务有多少,BIGINT类型可能10年不会存满吧。最后说一句,不要试图去想办法让ID值重复使用,尽管有许多办法可以实现,但那几乎是得不偿失的。