FreeSource : SQLite/sqlite3lastinsertrowid



Каждая запись в таблице SQLite имеет уникальный целочисленный со знаком 64-битный ключ, который называется “rowid”. rowid всегда доступен как необъявленая колонка с именем ROWID, OID, или _ROWID_ так долго, пока те же названия не будут использованы явно объявлеными колонками. Если таблица содержит колонку с типом INTEGER PRIMARY KEY, то она также является псевдонимом для ROWID.

Эта функция возвращает rowid после первой успешной команды INSERT в базе, указатель на которую передается в качестве аргумента. Если же INSERT'ов никогда не выполнялось с этой базой данных, функция вернет ноль.

Если INSERT выполняется триггером, то rowid вставленной строки будут возвращаться этой функцией так долго, пока триггер не завершит свою работу. Но как только триггер завершит выполнение, значение вернется к последнему значению, вставленному до работы триггера.

Если при выполнении INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK, и INSERT OR ABORT вставка была неудачной, значение выдаваемое этой функцией не изменяется. Напротив, INSERT OR REPLACE всегда выполняется успешно. Дело в том, что INSERT выполняется после удаления столбцов, которые могли бы вызвать проблему при вставке значений, поэтому INSERT OR REPLACE всегда завершается успешно.

Для данной функции INSERT считается успешным даже если в последствии будет выполнен откат транзакции.