Php 重新分配mysql用户id

Php 重新分配mysql用户id,php,mysql,Php,Mysql,我不确定是否有可能,但是否有办法在数据库中重新分配属性“id”,例如id=1,2,3,4,5,6(6个元素),然后删除id=3,因此当您查看数据库时,您的“id”会按如下顺序重新分配。id=1,2,3,4,5(删除id=3后的5个元素)。我的“id”属性是自动递增的 id Name 1 A 2 B 3 C 4 D 5 E 6 F 然后删除id=3 id Name 1 A 2 B<-- 3 is deleted

我不确定是否有可能,但是否有办法在数据库中重新分配属性“id”,例如id=1,2,3,4,5,6(6个元素),然后删除id=3,因此当您查看数据库时,您的“id”会按如下顺序重新分配。id=1,2,3,4,5(删除id=3后的5个元素)。我的“id”属性是自动递增的

id    Name
1     A
2     B
3     C
4     D
5     E
6     F
然后删除id=3

id    Name
1     A
2     B<--   3 is deleted
4     D<--   name C is deleted
5     E
6     F
我找不到办法来完成这件事。我希望您能提供帮助。

如果使用,请将其视为代理键-也就是说,该值“不重要”,只是保证每个关系域的值是唯一的

也就是说,它只是一个与数据无关的实现细节——试图“压缩”这个序列或以其他方式将其用于序列排序违反了这一点

要“压缩”自动增量主键列,请参阅(因为“重置”自动增量种子需要压缩)。然而,我建议不要这样做,因为根据我之前的评论,它违反了代理PK列


现在,抛开以上所有内容不谈,我相信一个解决方案可能是在查询中引入一个序列号,否则会“使程序中断”——当然,这取决于程序是如何输入数据的,它使用数据的,以及它是如何中断的

SET @i := 0;
SELECT
    (@i := (@i+1)) as seqNo
  , name
FROM people
ORDER BY id

此序列号(
seqNo
)仅与该结果集中的行号相关,也可以在客户端生成-它与ID无关,尽管ID用于保证稳定的排序。

如果确实需要,请先仔细考虑。在我的实践中,我从未需要重建具有自动增量列的表的顺序

CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT `Name` FROM `table1`);
TRUNCATE `table1`;
INSERT INTO `table1` (`Name`) (SELECT `Name` FROM table2)

如果您的表中有外键,这将不起作用。

为什么要这样做?“我找不到完成此操作的方法。”-不应该这样做。id的唯一目的是识别记录,而不是其他。我知道每个人都反对它,但我得到了一个程序,出于某种原因,该程序只有在id正常且从id=1,2,3,4,5,6开始没有任何中断时才能工作。我试着改变程序,但我没有得到任何结果。我知道如果我能重新分配id,那么我的程序就可以运行了。理论上,你能修复另一个程序吗?可能的重复我知道每个人都反对它,但我得到了一个程序,出于某种原因,该程序只在id正常时运行,从id=1,2,3,4,5,6开始没有任何中断。我试着将程序本身改为除任何不符合顺序的id号之外,但我在哪里都找不到。我知道如果我能够重新分配id,那么我的程序将work@Jordan正确的解决方案是修复程序(并找出它为什么会中断)。在任何情况下,我的链接答案都包含“压缩”的解决方案——然而,这必须在引入任何间隙后进行,因为这是一个糟糕的补丁,即使是临时的黑客攻击。
CREATE TEMPORARY TABLE IF NOT EXISTS table2 AS (SELECT `Name` FROM `table1`);
TRUNCATE `table1`;
INSERT INTO `table1` (`Name`) (SELECT `Name` FROM table2)