你真的不想这么做,原因很多。
首先,如果页面打开,可能会出错。假设用户在id = 4
的条目的编辑页面上,那么当您删除id = 3
的条目并根据您的建议更新ID时。现在,当编辑人员提交时,ID将从他的页面中取出,他将更新新条目4而不是旧条目4.现在,这是一个直截了当的简单示例,但除此之外,还有更多的东西在这个级别可能会出错。其次,编程时涉及很多工作。首先,你需要更新你的专栏。然后,你还需要确保MySQL知道给出下一个条目的号码。然后,所有这些都必须在一个环境中工作,以确保我们不会在上述问题上遇到很多问题(这非常困难)。与没有做任何事情的选择相比,这是很多工作。
第三个问题是存在巨大的性能开销。想象一下拥有一个拥有成千上万条记录的数据库,然后删除一个低ID的条目。突然间,具有更高ID的所有条目都必须更新。这可能意味着您的网站变得没有响应,因为它正在完成这项任务,并且无法在同一时间处理太多其他事情(事实上,为了确保我们不会像第一点那样遇到问题,我们必须确保我们不会同时做其他任何事情(或者确保我们在不同的数据副本上工作),因为我们可能会在整个更新过程中产生一个结果
我的建议与其他人所说的一致:只要保持原样,不要担心这一点。auto_increment
仅用于一个目的:轻松地为每个值赋予唯一的标识符。使用此标识符来标识和引用也许还可以对这些标识符进行排序的情况下,但没有更多的是有一定的顺序(即使这样人们会不同意与此使用它)。
而不是试图更新ID,我们应该寻找另一个地方来解决这个问题。如果问题纯粹是你对此的感受,那很简单。您可能并不感觉良好,但您只需要说服自己,更新所有这些ID不是您正在寻找的解决方案。如果你在其他地方使用数字,这个问题可能会更复杂一些。但是,总是有可能使用PHP为每个条目生成数字,如果数字用于生成HTML内容,那么绝对是这样做的合理位置。如果您提供更多关于使用连续数字的地方的详细信息,那么可以考虑如何解决这种情况。
什么都不做,这是它应该如何工作。 – JvdBerg
除了在数据库中标识**记录之外,您不应使用_anything_的ID。正因为如此,我们没有理由永远不在乎记录的ID是什么模式,它的顺序是什么,或者其他什么。 **只要给定表中的所有ID都是唯一的(它们将与auto_increment一样),那么**并不重要。 – sgroves
诉诸身份证以符合无用的规则具有良好的序列号是一个巨大的数据完整性洞,而不是说主要的性能杀手。保持原样,auto_increment不会给你连续的数字,你可以用它来稍后显示,它只有一个目的,那就是唯一标识一条记录。 –