我有表格自动,在表格中,列ID为auto_increment
并且索引为primary key
我想要重置ID,我需要这些ID将从1
排队到2,3,4,5,...
对于重置ID,我运行此查询:
ALTER TABLE autos AUTO_INCREMENT = 1
这意味着现在,maximal id必须是等效的行数吗?
但是这段代码
$res = $db->query("SELECT COUNT(*) AS cnt FROM autos")->fetchAll(PDO::FETCH_ASSOC);
echo "rows count: ".$res[0]['cnt']."<br>";
$res = $db->query("SELECT MAX(id) AS id FROM autos")->fetchAll(PDO::FETCH_ASSOC);
echo "max id".$res[0]['id'];
返回
rows count: 376733
max id: 500000
为什么max id和rows数量不匹配?哪里错了?
答案 0 :(得分:1)
我永远不会像这样更新ID字段,你会破坏与其他表的任何关系(如果你有它们)并导致很多混乱。 您应该创建一个新字段SortOrder或不是主键的东西,然后将此字段更新为新的行号。
答案 1 :(得分:-2)
COUNT函数将返回表中的行数,而MAX函数返回列中表中的MAX值。
例如,如果表中只有一条ID值为5000的记录,则count将返回1,而MAX(ID)将返回5000.
插入记录时,如果不为自动增量列提供值或提供NULL值,则MySQL会将AUTO-INCREMENT计数分配给此自动增量列并增加指针。