我有一个MYSQL表,在其中(已存在的表中)添加了另一列“ Number”,该列是auto_incremented并具有UNIQUE KEY约束的。 表格中有17000多个记录。添加“ Number”列后,将丢失一个值-值为14 369,而下一个值为14 371。 我尝试删除该列并再次添加它,但是仍然缺少缺少的值。 可能是什么问题,解决这个问题的最痛苦的方法是什么?
答案 0 :(得分:2)
没有问题,也没有要修复的东西。
MySQL的auto_increment
提供唯一值,并使用顺序递增算法(仅递增一个数字)来计算它们。
该算法可确保以最快,最准确的方式生成唯一值。 那是它的工作。它不会“重用”数字,而强迫这样做会带来灾难性的性能和稳定性。
由于查询有时会失败,因此这些数字会“丢失”,您无法将其取回。
如果出于任何原因需要序列号,请创建一个过程或计划的事件并自己维护这些数字。
您必须记住,MySQL是旨在在并发访问下运行的事务性数据库。如果要重用这些数字,则性能将很糟糕,因为它必须使用锁并迫使人们等待直到重新组织数字。
InnoDB引擎(默认引擎)使用主键值来组织硬盘驱动器上的记录。如果您要更改任何值,它将开始重新写入记录,从而导致巨大的I / O等待,具体取决于磁盘上的数据量-这可能会使整个服务器停止工作。