Php 删除行时,如何始终序列化mysql中的id行
当我删除数据库中的行时,ID(自动增量)现在不再是串行的。假设我有Php 删除行时,如何始终序列化mysql中的id行,php,mysql,Php,Mysql,当我删除数据库中的行时,ID(自动增量)现在不再是串行的。假设我有123456789并且删除行345。删除后,我希望ID显示为123456,而不是1267789 请问我该怎么做 更新 我正在使用此代码显示从db生成的注释的序列号…(在while循环中) 您想做的不是好的实践。主键上的孔不应该留在那里。例如,假设在另一个表中有一个对主表中ID25的引用。如果主表中发生了变化,引用将突然指向另一条记录 比如说,网络链接也是如此。有一个像 details.html?id=255 突然指向另一个记录
123456789
并且删除行345
。删除后,我希望ID显示为123456
,而不是1267789
请问我该怎么做
更新
我正在使用此代码显示从db生成的注释的序列号…(在while循环中)
您想做的不是好的实践。主键上的孔不应该留在那里。例如,假设在另一个表中有一个对主表中ID25
的引用。如果主表中发生了变化,引用将突然指向另一条记录
比如说,网络链接也是如此。有一个像
details.html?id=255
突然指向另一个记录将是非常糟糕的
如果您想要一个完美的串行ID,最好在应用程序级别创建它。使用:SELECT*FROM table\u name LIMIT offset,row\u 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";
autoincrement仅用于合成关键点。这些键没有任何语义含义,因此它们是否按顺序排列并不重要
如果你的ID列有语义意义,你应该给它一个有意义的名字,不要在它上使用自动增量(如果需要的话,你可以考虑用自动增量创建一个新的合成键)。
要实现分页,可以使用数据库查询。考虑MySQL关键字<代码>限制< /代码>和<代码>偏移< /代码>。这样,生成链接的代码就不必担心ID序列中的漏洞。ID是主键吗?记录的ID(主键)应该永远不会更改。为什么需要这种行为?@Spontifixus请参阅更新如果删除记录,则引用应无效(设置为NULL),或者删除操作应级联(级联),或者删除操作应限制在该位置(无操作,限制),但决不能有指向(不再)现有记录的记录。只要设定好你的禁忌,这个问题就不会发生了。当然,改变主键是一种很糟糕的做法。
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";