int sqlite3_changes(sqlite3*); sqlite3_int64 sqlite3_changes64(sqlite3*);
这些函数返回由最近完成的 INSERT、UPDATE 或 DELETE 语句修改、插入或删除的行数,这些语句作用于由唯一参数指定的数据库连接。这两个函数除了返回值类型和如果最近 INSERT、UPDATE 或 DELETE 语句修改的行数大于类型“int”支持的最大值,则 sqlite3_changes() 的返回值未定义之外,其他都相同。执行任何其他类型的 SQL 语句都不会修改这些函数返回的值。
只考虑 INSERT、UPDATE 或 DELETE 语句直接进行的更改 - 由触发器、外键操作或REPLACE约束解析引起的辅助更改不计入在内。
由INSTEAD OF 触发器拦截的视图更改不计入在内。在视图上运行 INSERT、UPDATE 或 DELETE 语句后,sqlite3_changes() 返回的值始终为零。仅计算对实际表的更改。
如果在触发器程序运行期间执行 sqlite3_changes() 函数,情况会变得更加复杂。如果程序使用changes() SQL 函数,或者如果某些其他回调函数直接调用 sqlite3_changes(),则可能会发生这种情况。本质上
这意味着,如果触发器中的第一个 INSERT、UPDATE 或 DELETE 语句使用 changes() SQL 函数(或类似函数),它将返回调用语句开始执行时设置的值。如果它在触发器程序中的第二个或后续此类语句中使用,则返回的值反映了同一触发器中前一个 INSERT、UPDATE 或 DELETE 语句修改的行数。
如果在sqlite3_changes()运行时,另一个线程对同一数据库连接进行更改,则返回值不可预测且没有意义。
另请参阅