MAX(rowid)给出n + 1行作为答案

时间:2019-03-25 16:30:04

标签: mysql sqlite rowid

“从studdetail中选择max(rowid)” 这应该给出表中的最大行。它在一个位置给出,但在另一个位置给出n + 1(n是行数)。 可能是什么原因? 我读到类似隐藏行的内容,如果可以,请解释。 谢谢

1 个答案:

答案 0 :(得分:1)

max(rowid)将返回最高的rowid。

如果已删除行,或者已跳过行ID(can occur),或者已手动设置行ID,则分配的最高行ID可能大于实际行的数量。那是一行的rowid值,不需要完全表示其位置。

count(rowid)将返回行数。

示例

请考虑以下内容:-

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;

第一个结果,max(rowid)和count(rowid)均为5:-

enter image description here

第二个结果(已删除中间行)显示max(rowid) (5)count(rowid) (4):-

enter image description here

第三个结果(作为rowid值被强制为26)显示出更大的差异(26 v 5):-

enter image description here