0

我有表汽车,在表中列 id 为auto_incrementAND 索引为primary key

我想要重置 id,即我需要将 ids 排队12,3,4,5,...

对于重置 id,我运行以下查询:

ALTER TABLE autos AUTO_INCREMENT = 1

这意味着现在,最大 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

为什么最大 id 和行数不匹配?我错在哪里?

4

2 回答 2

1

我永远不会像那样更新 ID 字段,您将破坏与其他表的任何关系(如果有的话)并造成很多混乱。您应该创建一个新字段 SortOrder 或不是主键的内容,然后将此字段更新为新的行号。

于 2013-04-03T13:47:40.790 回答
-2

COUNT 函数将返回表中的行数,而 MAX 函数返回表中列的 MAX 值。

例如,如果您的表中只有一条 ID 值为 5000 的记录,则 count 将返回 1,而 MAX(ID) 将返回 5000。

在插入记录时,如果您不为自增列提供值或提供 NULL 值,则 MySQL 会将 AUTO-INCREMENT 计数分配给该自增列并增加指针。

于 2013-04-03T13:45:58.717 回答