Mysql 给出n+1行作为答案的最大值(rowid)

Mysql 给出n+1行作为答案的最大值(rowid),mysql,sqlite,rowid,Mysql,Sqlite,Rowid,从studdetail中选择maxrowid 这将给出表中的最大行数。它在一个地方给出,但在另一个地方给出n+1n是行数。 原因可能是什么? 我读到一些类似隐藏行的东西,如果是,请解释。 谢谢maxrowid将返回最高的rowid 如果行已被删除,或该rowid已被跳过,或已手动设置rowid,则分配的最高rowid可能大于实际行数。也就是说,行的rowid值不需要精确表示其位置 countrowid将返回行数 实例 考虑以下几点:- DROP TABLE IF EXISTS thetable;

从studdetail中选择maxrowid 这将给出表中的最大行数。它在一个地方给出,但在另一个地方给出n+1n是行数。 原因可能是什么? 我读到一些类似隐藏行的东西,如果是,请解释。 谢谢

maxrowid将返回最高的rowid

如果行已被删除,或该rowid已被跳过,或已手动设置rowid,则分配的最高rowid可能大于实际行数。也就是说,行的rowid值不需要精确表示其位置

countrowid将返回行数

实例 考虑以下几点:-

DROP TABLE IF EXISTS thetable;
CREATE TABLE IF NOT EXISTS thetable (mycolumn);
INSERT INTO thetable VALUES('A'),('B'),('C'),('D'),('E');
SELECT max(rowid), count(rowid) FROM thetable;
DELETE FROM thetable WHERE mycolumn = 'C';
SELECT max(rowid), count(rowid) FROM thetable;
INSERT INTO thetable (rowid,mycolumn) VALUES(26,'Z');
SELECT max(rowid), count(rowid) FROM thetable;
第一个结果maxrowid和countrowid均为5:-

第二个结果(中间行已删除)显示maxrowid 5和countrowid 4之间存在差异:-

第三个结果(rowid值被迫为26)显示了更大的差异26 v 5:-


这是什么意思?它在一个地方,但在另一个地方,哪个数据库?你把它标记为多个?由于使用了rowid列,我假设sqlite?从studdetail中选择maxrowid这将提供表中的最大行数。它还假设您从未从表中删除最后一条maxrowid记录。。你也在谈论SQLite,因为你在谈论rowid?哦,等等。您是否希望max rowid等于表中的行数?事情不是这样的。