Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 删除行时,如何始终序列化mysql中的id行_Php_Mysql - Fatal编程技术网

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

Php 删除行时,如何始终序列化mysql中的id行,php,mysql,Php,Mysql,当我删除数据库中的行时,ID(自动增量)现在不再是串行的。假设我有123456789并且删除行345。删除后,我希望ID显示为123456,而不是1267789 请问我该怎么做 更新 我正在使用此代码显示从db生成的注释的序列号…(在while循环中) 您想做的不是好的实践。主键上的孔不应该留在那里。例如,假设在另一个表中有一个对主表中ID25的引用。如果主表中发生了变化,引用将突然指向另一条记录 比如说,网络链接也是如此。有一个像 details.html?id=255 突然指向另一个记录

当我删除数据库中的行时,ID(自动增量)现在不再是串行的。假设我有
123456789
并且删除行
345
。删除后,我希望ID显示为
123456
,而不是
1267789

请问我该怎么做

更新

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


您想做的不是好的实践。主键上的孔不应该留在那里。例如,假设在另一个表中有一个对主表中ID
25
的引用。如果主表中发生了变化,引用将突然指向另一条记录

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

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";