删除数据后在数据库中调用id字段

时间:2012-10-26 15:18:17

标签: php mysql pdo

我有问题。我创建了一个数据库(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?示例I包含此数据的数据:id = 2,lastname = clyde,address = switzerland。如何通过lastname值获取id值?

3 个答案:

答案 0 :(得分:1)

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

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

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

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

我的建议与其他人所说的一致:只要保持原样,不要担心这一点。 auto_increment仅用于一个目的:轻松为每个值提供唯一标识符。使用此标识符仅标识和引用相同的条目。也许人们也可以对这些标识符进行排序,但不过只有一个特定的顺序(即使那时人们也不同意这种标识的使用)。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

或者我的建议是保持原样。它没有造成任何暧昧。