我正在创建一个网页。该网页根据用户操作将数据存储到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.
答案 0 :(得分:3)
没有,因为它不重要。您不应该依赖主键是一个连续的序列。它唯一的功能是确保密钥是行的唯一标识符,超出数字没有意义。
答案 1 :(得分:2)
你不想这样做。主键是唯一标识符,创建后不应更改。您正在寻找的是nested sets。添加一个字段以跟踪left_id和right_id,并在必要时手动更新。 Doctrine2中有一些库可以帮助您处理这个问题。
如果绝对必须进行此更改,可以使用alter table删除该字段,然后重新添加。