Updated: 2022/Sep/29

Please read Privacy Policy. It's for your privacy.

SQLITE3_LAST_INSERT_ROWID(3)                          Library Functions Manual

     sqlite3_last_insert_rowid - Last Insert Rowid


     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 usually 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

     As well as being set automatically as rows are inserted into database
     tables, the value returned by this function may be set explicitly by

     Some virtual table implementations may INSERT rows into rowid tables as
     part of committing a transaction (e.g.  to flush data accumulated in
     memory to disk).  In this case subsequent calls to this function return
     the rowid associated with these internal INSERT operations, which leads
     to unintuitive results.  Virtual table implementations that do write to
     rowid tables in this way can avoid this problem by restoring the original
     rowid value using sqlite3_set_last_insert_rowid() before returning
     control to the user.

     If an INSERT occurs within a trigger then this routine will return the
     rowid of the inserted row as long as the trigger is running.  Once the
     trigger program ends, the value returned by this routine reverts to what
     it was before the trigger was fired.

     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
     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.

     sqlite3_last_insert_rowid(3), sqlite3_set_last_insert_rowid(3)

NetBSD 9.99                    December 19, 2018                   NetBSD 9.99