MAX (rowid) дает n + 1 строк в качестве ответа - PullRequest
0 голосов
/ 25 марта 2019

"SELECT max (rowid) из шиповника" это должно дать максимальную строку в таблице. И это дает в одном месте, но в другом это дает n + 1 (n - это число строк). Какие могут быть причины? Я читал что-то вроде скрытой строки, если да, то объясните. Спасибо

1 Ответ

1 голос
/ 25 марта 2019

max(rowid) вернет самый высокий 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

...