php - 删除数据后重新整理数据库中的id字段

标签 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 吗?示例我有以下数据:id=2,lastname=clyde,address=瑞士。如何仅通过姓氏值获取 id 值?

最佳答案

出于多种原因,您确实不想这样做。

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

其次,编程时涉及很多工作。首先,您需要更新您的列。然后,您还需要确保 MySQL 知道为下一个条目提供什么数字。然后所有这些都必须在一个环境中发挥作用,确保我们不会遇到上述提到的那么多问题(这是一件非常困难的事情)。与什么都不做相比,这是一项大量的工作。

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

我的建议与其他人的说法一致:保持原样即可,不用担心这个。 auto_increment 仅用于一个目的:轻松为每个值提供唯一标识符。使用此标识符仅识别和引用同一条目。也许人们还可以对这些标识符进行排序,但最多只能有一定的顺序(即使如此,人们也会不同意它的这种用法)。

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

关于php - 删除数据后重新整理数据库中的id字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13089706/

相关文章:

php - 拆分逗号分隔值以查找结果

当列包含 utf-8 字符时 MySQL 查询返回错误数据

mysql - 在 Visual Basic 中,如何查看/编辑远程 mysql 数据库中的表

php - 数据库查询逻辑问题

php - 使用自定义日历颜色嵌入 Google 日历

Php.ini 导致 Ajax 加载缓慢?

php - 使用 Eloquent 进行一些复杂的查询

mysql - IN 函数的奇怪结果,id 列表在引号中

php - 在 PHP PDO 中获取最后执行的查询

php - 在 where 子句中具有多个条件的 PDO 准备语句