小编典典

自动消除主键序列中的间隙

sql

我正在创建一个网页。该网页根据用户操作将数据存储到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的行。


阅读 127

收藏
2021-05-23

共1个答案

小编典典

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

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

2021-05-23