描述
将第一个参数中数据库连接中最近成功插入的INSERT的rowid返回到数据库中。
C / C ++语法
sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*); |
PB语法
FUNCTION sqlite3_last_insert_rowid ( _ BYVAL hDbc AS DWORD _ ) AS QUAD |
参数
pDb
[in]数据库连接句柄。必须是从sqlite3_opensqlite3_open16或sqlite3_open_v2获取的NULL指针或sqlite3对象指针。
返回值
最近成功将INSERT的rowid从数据库连接中插入数据库的第一个参数。
备注
SQLite表中的每个条目都有一个唯一的64位有符号整数键,称为“rowid”。rowid始终可用作名为ROWID,OID或_ROWID_的未声明列,只要这些名称也不被明确声明的列使用。如果表具有INTEGER PRIMARY KEY类型的列,则该列是rowid的另一个别名。
此函数将第一个参数中数据库连接中最近成功插入的INSERT的rowid返回到数据库中。从SQLite 3.7.7版本开始,这个函数记录了普通表和虚拟表的最后一个insert rowid。如果该数据库连接上没有发生任何成功的INSERT,则返回零。
如果INSERT发生在触发器内或虚拟表方法中,则只要触发器或虚拟表方法正在运行,该函数将返回插入行的rowid。但是一旦触发或虚拟表方法结束,此函数返回的值将返回到触发器或虚拟表方法开始之前的值。
由于约束违规而失败的INSERT不是成功的INSERT,并且不会更改此函数返回的值。因此INSERT OR FAIL,INSERT或IGNORE,INSERT OR ROLLBACK和INSERT OR ABORT在插入失败时不会更改此函数的返回值。当INSERT OR REPLACE遇到约束违规时,它不会失败。删除导致约束问题的行后,INSERT会继续完成,因此INSERT OR REPLACE将始终更改此接口的返回值。
为了实现此函数,即使后来回滚,INSERT也被认为是成功的。
SQL函数可通过last_insert_rowidSQL函数访问此函数。
如果单独的线程在sqlite3_last_insert_rowid函数运行时在同一数据库连接上执行新的INSERT,从而更改最后一个插入rowid,则sqlite3_last_insert_rowid返回的值是不可预测的,可能不等于旧的或新的最后一个插入rowid。
C ++实现代码
/*
** Return the ROWID of the most recent insert
*/
SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
return db->lastRowid;
}