Есть autoinc поле primary key типа integer. После вставки новых записей оно автоматически увеличивается. Как быстрее всего получить самое свежее значение?

Проще и быстрее всего выполнить SQL-запрос, обратившись к внутренним структурам SQLite, а не к таблице, которую вы только что меняли.

Например, структура таблицы tech_msg:

1
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE [tech_msg](
  [uin] INTEGER NOT NULL, 
  [tech_id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
  [msg_cmd] INTEGER NOT NULL, 
  [packet_type] INTEGER NOT NULL, 
  [body_json] VARCHAR NOT NULL, 
  [dt_utc] DATETIME NOT NULL);
 
CREATE INDEX [bytechmsg_uin_id]
ON [tech_msg](
  [uin], 
  [tech_id]);

Тогда запрос для получения последнего autoinc значения будет выглядеть так:

1
SELECT seq FROM sqlite_sequence WHERE name = "tech_msg"

Работает быстро, даже внутри транзакций. То, что надо.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *