在MySQL中管理删除时的唯一ID


Managing unique IDs on deletion in MySQL

我的标题可能有点偏离,但我不知道如何解释。

我目前正在制作一个照片组合,用户可以从网络界面上传图像。完成此操作后,将发生以下情况:

图像是通过HTML表单->PHP上传的。创建一个包含以下信息的SQL记录:

ID (Autoincrement) - Image title - Image Desc - Filepath

用户还可以通过网络界面中的另一个页面管理他们的上传。发生这种情况时,SQL记录将与文件一起删除。然而,当然后,用户添加一个新文件,使用下一个ID号,在数据库中留下一个空白区域,该空白区域是被删除的记录所在的位置。

我理解这是因为autoincrement不是用于向用户显示的ID,而是用于其他目的。然而,由于我使用这些信息在图像查看器中显示照片编号,我想要一种更合适的方法。我需要的基本上是一个包含int的MySQL列,它将填补删除记录时创建的空白。例如:

1 - 2 - 3 - 4 - 5 - 6 - 7 - 8

删除记录5后,我需要ID来填补空白,所以我代替

1 - 2 - 3 - 4 -   - 6 - 7 - 8

获取1-2-3-4-5-6-7

有什么建议吗?

谢谢你的帮助。:-)

MySQL没有很好的自动功能,但您可以使用以下工具手动完成:

SELECT sequence_number FROM photo WHERE photo_id = 729; -- This would be 5.
DELETE FROM photo WHERE photo_id=729;
UPDATE photo SET sequence_number = sequence_number - 1 WHERE sequence_number > 5;

UPDATE查询可以包括任何其他条件(例如,匹配的album_id)来描述其编号是连续的图片集。

然而,话虽如此,如果你总是向用户显示一个序列号,为什么它需要存储在数据库中?当PHP代码对结果进行迭代时,只需在其中添加数字即可。

$sequence_number = 1;
while ($row = mysql_fetch_assoc($results)) {
    // ... Display everything ...
    $sequence_number++;
}

尝试:

SET @count = 0;
UPDATE `<table>` SET `<table>`.`<column>` = @count:= @count + 1;

上面的查询将循环并遍历每一行,并使用顺序整数更新<column>字段。

这应该可以回答你的问题,但据我所知,你对图像查看器的问题可能完全不同,与自动增量问题无关。