我正在创建一个网页。此网页根据用户的操作将数据存储到MySQL数据库中。数据库有很多行。行的主键是列rowID,它只是按顺序对行进行编号(例如1,2,3,4....)。用户可以选择删除行。问题是,当用户删除最后一行以外的行时。rowID中有一个跳过。例如,如果有5行,1,2,3,4 ,5,用户删除了第三行。现在PHP列中的数据是1,2,4,5。我想知道在MySQL或rowID中是否已经有一个内置函数来有效地说明这一点。
我所知道的摆脱这种情况的唯一方法是循环遍历各行,并基本上刷新rowID。但是,如果有大量的行,我觉得这在时间上是非常昂贵的。
我还想知道如果创建了新的行,如何自动递增rowID。目前,我有代码来查找当前最大的rowNumber,并插入具有当前最大rowNumber+1的行。
发布于 2013-03-12 17:52:41
你不会想这么做的。主键是唯一的标识符,一旦创建就永远不能更改。你要找的是nested sets。添加一个字段以跟踪left_id和right_id,并在必要时手动更新该字段。Doctrine2中有一些库可以为您处理此问题。
如果一定要进行此更改,可以使用alter table删除该字段,然后重新添加它。
发布于 2013-03-12 17:54:40
不,没有,因为它不重要。您不应该依赖于主键是一个连续的序列。它唯一的功能是确保键是该行的唯一标识符,除此之外,数字没有任何意义。
https://stackoverflow.com/questions/15368478
复制相似问题