SQLite C 接口

计算修改的行数

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()运行时对同一个数据库连接进行更改,则返回的值是不可预测的并且没有意义。

也可以看看:

另请参阅 对象常量函数的列表。