Php 如何自动将新id值设置为已删除行的id

Php 如何自动将新id值设置为已删除行的id,php,mysql,Php,Mysql,我有一个表,有50行,id列作为主键,自动递增 在开始时id值,其中从1到50 删除一行(例如id=1)并插入新行后,这将具有id=51 如何将新行设置为第一个空位置,在这种情况下,自动将id=1而不是51 此外,如果删除了id=5,则下一个插入的行应该具有id=5等等。您可以使用MySQL的查询变量跟踪上一个id并计算查询中的差异,例如: SELECT id, id - @previous AS difference, @previous := id FROM test, (SELECT @p

我有一个表,有50行,
id
列作为主键,自动递增

在开始时
id
值,其中从1到50

删除一行(例如
id=1
)并插入新行后,这将具有
id=51

如何将新行设置为第一个空位置,在这种情况下,自动将id=1而不是
51


此外,如果删除了
id=5
,则下一个插入的行应该具有
id=5
等等。

您可以使用MySQL的查询变量跟踪上一个id并计算查询中的差异,例如:

SELECT id, id - @previous AS difference, @previous := id
FROM test, (SELECT @previous := 0) a
ORDER BY id;
这将为您提供所有不同的ID。然后,您可以将其包装到另一个查询中,然后选择差异大于1的行以获取可用id,例如:

SELECT (id - difference + 1) AS available_id
FROM (
 SELECT id, id - @previous AS difference, @previous := id
 FROM test, (SELECT @previous := 0) a
 ORDER BY id) b
WHERE b.difference > 1
LIMIT 1;

以下是

您可以使用MySQL的查询变量跟踪上一个id并计算查询中的差异,例如:

SELECT id, id - @previous AS difference, @previous := id
FROM test, (SELECT @previous := 0) a
ORDER BY id;
这将为您提供所有不同的ID。然后,您可以将其包装到另一个查询中,然后选择差异大于1的行以获取可用id,例如:

SELECT (id - difference + 1) AS available_id
FROM (
 SELECT id, id - @previous AS difference, @previous := id
 FROM test, (SELECT @previous := 0) a
 ORDER BY id) b
WHERE b.difference > 1
LIMIT 1;

这是带有自动递增列的

,您不能更改每行的键检查。
您可以禁用键检查并截断将为每行重新分配新键(数字)的表,但这意味着以前的键将移动到其他行,具体取决于删除的行数以及它们在序列中的位置


如果您真的需要做一些类似于您正在做的事情,您也可以通过脚本创建一个人工索引的“自动”递增列。然后,您可以选择任何方式来管理该列。

使用自动增量列,您不能更改每行的键检查。
您可以禁用键检查并截断将为每行重新分配新键(数字)的表,但这意味着以前的键将移动到其他行,具体取决于删除的行数以及它们在序列中的位置


如果您真的需要做一些类似于您正在做的事情,您也可以通过脚本创建一个人工索引的“自动”递增列。然后你就可以用你选择的任何方式来管理这个专栏了。

这没用。@u\u mulder,这对medon有用,不要删除数据库中的行,只需使用新的用户值更新该行,为特定表编写一个
触发器
,将删除的id存储在
可诱惑的
中,而
插入
检查
可诱惑的
中是否存在任何id,如果存在,请使用该id并从可诱惑的表中删除tat id,否则将其保留为
null
auto increment
将执行REST操作重用ID有什么好处?这没用。@u\u mulder,这对medon有用,不要删除数据库中的行,只需使用新的用户值更新该行,为特定表编写一个
触发器
,将删除的id存储在
可诱惑的
中,而
插入
检查
可诱惑的
中是否存在任何id,如果存在,请使用该id并从可诱惑的表中删除tat id,否则将其保留为
null
auto increment
将重新使用ID有什么好处?