MAX(rowid) 给出 n+1 行作为答案
MAX(rowid) giving n+1 rows as answer
"SELECT max(rowid) from studdetail"
这应该在 table 中给出最大行。它在一个地方给出,但在另一个地方给出 n+1(n 是行数)。
可能是什么原因?
我读过类似隐藏行的内容,如果是,请解释一下。
谢谢
max(rowid)
将 return 最高的 rowid。
如果行已被删除,或该rowid 已被跳过(can occur),或rowid 已被手动设置,分配的最高rowid 可能大于实际行数。即一行的 rowid 值不需要准确表示它的位置。
count(rowid)
会 return 行数。
例子
考虑以下:-
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 :-
第二个结果,由于删除了中间行,显示 max(rowid)
(5) 和 count(rowid)
(4) :-
第三个结果,因为 rowid 值被强制为 26,显示出更大的差异 (26 v 5) :-
"SELECT max(rowid) from studdetail" 这应该在 table 中给出最大行。它在一个地方给出,但在另一个地方给出 n+1(n 是行数)。 可能是什么原因? 我读过类似隐藏行的内容,如果是,请解释一下。 谢谢
max(rowid)
将 return 最高的 rowid。
如果行已被删除,或该rowid 已被跳过(can occur),或rowid 已被手动设置,分配的最高rowid 可能大于实际行数。即一行的 rowid 值不需要准确表示它的位置。
count(rowid)
会 return 行数。
例子
考虑以下:-
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 :-
第二个结果,由于删除了中间行,显示 max(rowid)
(5) 和 count(rowid)
(4) :-
第三个结果,因为 rowid 值被强制为 26,显示出更大的差异 (26 v 5) :-