Mysql Myisam重新使用被删除的自动递增的ID

时间:2012-06-04 20:43:56

标签: mysql primary-key auto-increment myisam

我有一张桌子:test

id int(10)自动增量 名字c​​har(36)

现在让我们说一下它从ID 1000填充的WHOLE表=>最大唯一ID号。 Id 1 - 1000 =先前已删除。

问题1;请问mysql重用这些删除的id? 问题2;如果没有,我如何进行自动增量或重新使用表中不存在的唯一标识符?

我问的原因是,我的表将包含很多条目,并且很多条目将一直被删除。当我使用自动增量时“out-of-id”会发生什么?

感谢您对此的任何启发:)

- 汤姆

3 个答案:

答案 0 :(得分:3)

  1.   

    请问mysql会重新使用这些已删除的ID吗?

    mysqld启动时,它会通过查找现有记录的最大值(并添加1)来确定每个AUTO_INCREMENT列的下一个值。因此,如果删除具有最高值的记录并重新启动服务器,则确实会重用已删除的ID。

    否则,只有在手动更改下一个AUTO_INCREMENT值时才会重复使用这些值(建议,因为它不是并发安全的):

    ALTER TABLE foo AUTO_INCREMENT = 12345;
    
  2.   

    如果没有,如何进行自动增量或重新使用表中不存在的唯一标识符?

    一般来说,你没有:考虑重新设计你的数据结构,以便插入/删除不会以这种方式发生,或者使用更大的整数类型(BIGINT UNSIGNED是8个字节,所以可以去2 ^ 64或~10 ^ 19)。

  3.   

    使用自动增量时,当“run-out-of-id”时会发生什么?

    the manual中所述:

      

    使用AUTO_INCREMENT列的最小整数数据类型,该数据类型足以容纳您需要的最大序列值。当列达到数据类型的上限时,下一次生成序列号的尝试将失败。

答案 1 :(得分:1)

  1. 不,MySQL不会重复使用已删除记录中的ID
  2. 你真的需要吗?如果您的自动增量列的类型是BIGINT,那么您有可能的ID为18446744073709551615

答案 2 :(得分:0)

你需要重置自动增量,自动增量只是保持递增,并且如果你没有设置,它将不会返回。

alter table tablename auto_increment=value
像这样

mysql> alter table t1 auto_increment=200;
Query OK, 202 rows affected (0.04 sec)
Records: 202  Duplicates: 0  Warnings: 0

编辑: 如果你删除了一些记录,auto_increment将是“最后一个值+ 1”,你做什么并不重要,只有当你删除完整的表格时你才能“重新开始”。

最好的是触发器,但触发器不能改变表(http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html

所以你的最后一个选项是商店程序,请看这里:Is it possible to alter a table in mySql via stored procedures?

不推荐使用。