sqlite.h


Último identificador de fila insertado

sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);

Cada entrada en una tabla SQLite tiene clave entera con signo de 64 bits única llamada "rowid". El rowid está siempre disponible como una columna no declarada llamada ROWID, OID o _ROWID_ siempre y cuando estos nombres no hayan sido utilizados como nombre de columna explícito. Si la tabla tiene una columna de tipo INTEGER PRIMARY KEY entonce esa columna es otro aslias para rowid.

Esta función retorna el rowid del INSERT exitoso más reciente en la base de datos cuya conexión de base de datos se indica en el primer argumento. Desde SQLite versión 3.7.7, esta función almacena el último rowid insertado de las tablas de ordinarias y de las virtuales. Si no se han producido inserciones exitosas para la conexión de base de datos, se devuelve cero.

Si un INSERT se produce dentro de un disparador o de un método de tabla virtual, entonces esta función retornará el rowid de la fila insertada siempre que el disparador o método de tabla virtual esté en ejecución. Pero una vez que el disparador o método de tabla virtual termine, el valor devuelto por esta función se revierte al que tenía antes de que el disparador o método de tabla virtual empezara.

Un INSERT que falle debido a una violación de restricción no es un INSERT exitoso y no cambia el valor devuelto por esta función. Por lo tanto INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK e INSERT OR ABORT no modifican el valor de retorno de esta función cuando su inserción falla. Cuando INSERT OR REPLACE encuentra una violación de restricción, no es un fallo. El INSERT continúa para completarse después de borrar las filas que han provocado el problema de restricción de modo que INSERT OR REPLACE siempre puede cambiar el valor de retorno de esta función.

A los efectos de esta función, un INSERT se considera existoso aunque posteriormente sea revertido (rollback).

Esta función es accesible para sentencias SQL mediante la función SQL last_insert_rowid().

Si un hilo distinto realiza un nuevo INSERT en la misma conexión de base de datos mientras la función sqlite3_last_insert_rowid() se está ejecutando, y por lo tanto el último rowid insertado ha cambiado, entonces el valor retornado por sqlite3_last_insert_rowid() es impredecible y puede que no sea ni el nuevo no el viejo rowid insertado.