4

我正在创建一个网页。该网页根据用户的操作将数据存储到 MySQL 数据库中。数据库有很多行。行的主键是列rowID,它只是按顺序对行进行编号(例如1、2、3、4....)。用户可以选择删除行。问题是当用户删除最后一行以外的行时。rowID 中有一个跳过。例如,如果有 5 行, 1, 2, 3, 4 ,5 并且用户删除了第三行。现在 rowID 列中的数据是 1、2、4、5。我想知道 MySQL 或 PHP 中是否已经有一个内置函数来有效地解决这个问题。

我知道摆脱这种情况的唯一方法是循环遍历行并基本上刷新 rowID。但是,如果有大量行,我觉得这在时间方面会非常昂贵。

我还想知道如何在创建新行时自动增加 rowID。目前我有代码来查找当前最大的 rowNumber 并插入具有当前最大 rowNumber+1 的行。

4

2 回答 2

3

没有,因为它不重要。您不应该依赖主键是一个连续的序列。它的唯一功能是确保键是行的唯一标识符,除此之外,数字没有任何意义。

于 2013-03-12T17:54:39.557 回答
2

你不想那样做。主键是唯一标识符,一旦创建就不应更改。您正在寻找的是嵌套集合。添加一个字段来跟踪 left_id 和 right_id 并在必要时手动更新。Doctrine2 中有一些库可以为您处理这个问题。

如果您绝对必须进行此更改,您可以使用 alter table 删除该字段,然后重新添加它。

于 2013-03-12T17:52:40.557 回答