1

当我删除数据库中的行时,ID(auto_increment)现在不再是串行的。假设我有1 2 3 4 5 6 7 8 9并且我删除了 rows 3 4 5。删除后,我希望 ID 显示1 2 3 4 5 61 2 6 7 8 9

请问我该怎么做?

更新

我正在使用此代码显示从数据库生成的注释的序列号......(在一个while循环内)

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

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

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

4

3 回答 3

2

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

比如说,网络链接也是如此。有一个像

details.html?id=255 

突然指向不同的记录会糟糕。

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

于 2013-02-12T12:50:05.147 回答
1

使用: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";
于 2013-02-12T13:17:19.563 回答
0

自动增量仅用于合成键。这些键没有任何语义含义,因此它们是否按顺序无关紧要。

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

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

于 2013-02-12T13:24:46.880 回答