NAME
sqlite3_last_insert_rowid —
Last Insert
Rowid
SYNOPSIS
sqlite3_int64
sqlite3_last_insert_rowid(
sqlite3*);
DESCRIPTION
Each entry in most SQLite tables (except for WITHOUT ROWID tables) has a unique
64-bit signed integer key called the "rowid". The rowid is always
available as an undeclared column named ROWID, OID, or _ROWID_ as long as
those names are not also used by explicitly declared columns. If the table has
a column of type INTEGER PRIMARY KEY then that column is another alias for the
rowid.
The sqlite3_last_insert_rowid(D) interface returns the rowid of the most recent
successful INSERT into a rowid table or virtual table on database connection
D. Inserts into WITHOUT ROWID tables are not recorded. If no successful
INSERTs into rowid tables have ever occurred on the database connection D,
then sqlite3_last_insert_rowid(D) returns zero.
If an INSERT occurs within a trigger or within a virtual table method, then this
routine will return the rowid of the inserted row as long as the trigger or
virtual table method is running. But once the trigger or virtual table method
ends, the value returned by this routine reverts to what it was before the
trigger or virtual table method began.
An INSERT that fails due to a constraint violation is not a successful INSERT
and does not change the value returned by this routine. Thus INSERT OR FAIL,
INSERT OR IGNORE, INSERT OR ROLLBACK, and INSERT OR ABORT make no changes to
the return value of this routine when their insertion fails. When INSERT OR
REPLACE encounters a constraint violation, it does not fail. The INSERT
continues to completion after deleting rows that caused the constraint problem
so INSERT OR REPLACE will always change the return value of this interface.
For the purposes of this routine, an INSERT is considered to be successful even
if it is subsequently rolled back.
This function is accessible to SQL statements via the last_insert_rowid() SQL
function.
If a separate thread performs a new INSERT on the same database connection while
the sqlite3_last_insert_rowid() function is running and thus changes the last
insert rowid, then the value returned by sqlite3_last_insert_rowid() is
unpredictable and might not equal either the old or the new last insert rowid.
SEE ALSO
sqlite3_last_insert_rowid(3)