在线文档教程
Sqlite
C界面 | C Interface

Count The Number Of Rows Modified

Count The Number Of Rows Modified

int sqlite3_changes(sqlite3*

此函数返回由唯一参数指定的数据库连接上最近完成的 INSERT,UPDATE 或 DELETE 语句修改,插入或删除的行数。执行任何其他类型的 SQL 语句不会修改此函数返回的值。

只考虑由 INSERT,UPDATE 或 DELETE 语句直接进行的更改 - 由触发器,外键操作或 REPLACE 约束解析引起的辅助更改不计入在内。

对由 INSTEAD OF 触发器拦截的视图所做的更改不计算在内。sqlite3_changes() 立即在 INSERT,UPDATE 或 DELETE 语句在视图上运行后返回的值始终为零。只计算对实际表格所做的更改。

如果在触发程序运行时执行 sqlite3_changes() 函数,情况会更加复杂。如果程序使用 changes() SQL 函数,或者某个其他回调函数直接调用 sqlite3_changes() ,则可能会发生这种情况。主要有:

  • 在进入触发器程序之前,保存 sqlite3_changes() 函数返回的值。触发程序结束后,恢复原始值。

  • 在一个触发器程序中,每个 INSERT,UPDATE 和 DELETE 语句都会在正常完成时设置 sqlite3_changes() 返回的值。当然,这个值不会包含子触发器所做的任何更改,因为 sqlite3_changes() 值将在每个子触发器运行后被保存和恢复。

这意味着,如果 change() SQL 函数(或类似)由触发器中的第一个 INSERT,UPDATE 或 DELETE 语句使用,它会在调用语句开始执行时返回设置的值。如果触发器程序中的第二个或随后的此类语句使用了它,则返回值将反映同一触发器中先前的 INSERT,UPDATE 或 DELETE 语句修改的行数。

另请参阅 sqlite3_total_changes() 接口,count_changes pragma 和 changes() SQL 函数。

如果一个单独的线程在 sqlite3_changes() 运行时对相同的数据库连接进行更改,则返回的值是不可预测的,并且没有意义。

另请参见对象,常量和函数的列表。

SQLite is in the Public Domain.