Последний вставленный идентификатор строки определенной таблицы в SQLite3

Есть ли способ получить последний вставленный идентификатор строки определенной таблицы в SQLite3? Существует функция last_insert_rowid, которая возвращает rowid самого последнего успешного INSERT в rowid стол или виртуальный стол. Однако я хочу знать, есть ли такой метод для получения последнего вставленного идентификатора строки конкретной таблицы.


person Benjamin Du    schedule 09.09.2019    source источник
comment
Не надежно, нет. Однако SELECT max(rowid) FROM yourtable обычно работает, если ничто не вставляет строки с указанными пользователем значениями rowid.   -  person Shawn    schedule 09.09.2019


Ответы (1)


Последние вставленные rowid всех таблиц хранятся во внутренней таблице sqlite_sequence, которую можно запросить, например любой другой стол. Убедитесь, что ваш идентификатор первичного ключа имеет атрибут autoincrement, иначе его там нет.

sqlite> create table Test1 (id integer primary key autoincrement, text string);
sqlite> create table Test2 (id integer primary key autoincrement, text string);

[...]  -- Insert rows here

sqlite> select rowid from Test1;
id        
----------
1         
2         
sqlite> select rowid from Test2;
id        
----------
1         
2         
3
sqlite> select * from sqlite_sequence;
name        seq       
----------  ----------
Test1       2         
Test2       3         
person Murphy    schedule 09.09.2019
comment
Обоснованное предположение: нет, потому что они не контролируются движком SQLite. Но, честно говоря, я не знаю, так как я никогда не работал с виртуальными таблицами, у меня нет тестовой среды, чтобы исследовать это для вас, и я не нашел ресурса, который рассматривает эту деталь. Итак, вместо того, чтобы ждать ответа, который может никогда не прийти, почему бы вам не узнать его самому? Вам потребуется три оператора SQL, чтобы получить первое представление, если вы действительно используете виртуальные таблицы. - person Murphy; 11.09.2019