0

我有个问题。我创建了一个数据库(my_database),在其中创建了一个表(成员),并创建了字段(id、name、lastname、address)。id 字段设置为自动递增。现在我有 5 行,这意味着 id 的值是 1、2、3、4 和 5。当我删除 id 3 时,剩下的是 '1 2 4 5'。我的问题是我应该怎么做才能将“1 2 4 5”变为“1 2 3 4”?任何帮助将非常感激。

更新:我必须这样做,因为在我的网站上,我使用循环显示所有成员并访问 ID 号。或者甚至可以获取数据的 id 吗?示例我有数据这个数据:id=2,lastname=clyde,address=switzerland。如何仅通过姓氏值获取 id 值?

4

3 回答 3

1

出于多种原因,您真的不想这样做。

首先,如果页面打开,事情可能会出错。假设id = 4当您删除条目id = 3并按照您的建议更新 id 时,用户正在条目的编辑页面上。现在,当编辑者点击提交时,id 将从他的页面中获取,他将更新新条目 4 而不是旧条目 4。现在这是一个简单明了的例子,但除此之外还有很多东西在这个级别上可能会出错。

其次,在编程时需要做很多工作。首先,您需要更新列。然后,您还需要确保 MySQL 知道给下一个条目提供什么数字。然后所有这些都必须在确保我们不会遇到上述问题那么多问题的环境中工作(这是一件相当困难的事情)。与不做任何事情的替代方案相比,这是很多工作。

第三个问题是存在巨大的性能开销。想象一下,有一个包含成千上万个条目的数据库,然后删除一个低 id 的条目。突然,所有具有更高 id 的条目都必须更新。这很可能意味着您的网站变得无响应,因为它正在执行此任务并且无法同时处理太多其他事情(事实上,为了确保我们不会遇到第一点中的问题,我们必须确保我们不会同时做任何其他事情(或确保我们处理数据的不同副本或其他东西),因为我们最终可能会得到来自整个更新过程的结果。

我的建议将与其他人所说的一致:保持原样,不要担心。auto_increment仅用于一个目的:轻松地为每个值赋予唯一标识符。仅使用此标识符来标识和引用同一条目。也许人们也可以对这些标识符进行排序,但无非是有一个特定的顺序(即使这样人们也会不同意这种用法)。

我们应该寻找另一个地方来解决这个问题,而不是尝试更新 id。如果问题纯粹是你的感受,那很容易。您可能对此感觉不好,但您只需要说服自己更新所有这些 id 不是您正在寻找的解决方案。如果您在其他地方使用这些数字,则问题可能会更复杂一些。但是,总是有可能使用 PHP 为每个条目生成数字,如果在生成 html 内容时使用数字,这绝对是这样做的合乎逻辑的地方。如果您提供有关在何处使用序号的更多详细信息,则可以查看在这种情况下如何解决它。

于 2012-10-26T16:01:05.733 回答
0

您可以执行 UPDATE 查询,但大多数开发人员只是将 id 保留原样。如果对您很重要,您可以在 PHP 中进行编号。

于 2012-10-26T15:20:30.030 回答
0

您可以通过以下语句手动更新 id 值:

update members set id = (id-1) where id > 3;  

或者我的建议是保持原样。它不会引起任何歧义。

于 2012-10-26T15:46:18.327 回答