如何在删除行时始终序列化mysql中的id行

时间:2013-02-12 12:48:25

标签: php mysql

当我删除数据库中的行时,ID(自动增量)现在变得更长。假设我有1 2 3 4 5 6 7 8 9并删除行3 4 5。删除后,我希望ID显示为1 2 3 4 5 6,而不是1 2 6 7 8 9

请问我该怎么做?

更新

我正在使用此代码显示从db生成的注释中的序列号...(在while循环中)

     <?php  
            $serial = 0; 
            $serial++; 
            echo"<div class='commentserial'>
                  <div id='$serial'></div> 
                    <a href='#$serial'>$serial</a> 
                  </diV>";
      ?>

现在我在评论显示上有一个分页脚本,当我点击第二页而不是序列号从1开始到$ per_page Number。

所以我觉得如果我使用数据库ID,那么编号将不会从后续分页页面的1开始。

3 个答案:

答案 0 :(得分:2)

你想做什么不是好习惯。主键中的孔应该不会留在那里。想象一下,例如在另一个表中引用主表中的ID 25。如果主表中的某些内容发生变化,则引用会突然指向不同的记录。

同样适用于网络链接。拥有像

这样的网址
details.html?id=255 

突然指出不同的记录非常坏。

如果你想要一个完美的序列号,你可能最好在应用程序级别创建它。

答案 1 :(得分:1)

use:SELECT * FROM table_name LIMIT offset,row_count

示例:

if(isset($_GET['page'])) $page=$_GET['page'];
else                     $page=1;

$row_count=10;     

$offset=($page-1)*$row_count;
$sql="select * from table1 limit $offset,$row_count";

答案 2 :(得分:0)

自动增量仅适用于合成键。这些键没有任何语义含义,因此它们是否按顺序排列并不重要。

如果您的ID列具有语义含义,您应该给它一个有意义的名称,并且不要在其上使用自动增量(如果需要,可以考虑使用自动增量创建一个新的合成键。)

要实现分页,您可以使用数据库查询。考虑mysql关键字LIMITOFFSET。这样生成链接的代码就不必关心ID序列中的漏洞了。