文档首页
MySQL 9.0 C API 开发者指南
下载本手册
PDF (US Ltr) - 1.4Mb
PDF (A4) - 1.4Mb


5.4.1 mysql_affected_rows()

uint64_t
mysql_affected_rows(MYSQL *mysql)

描述

mysql_affected_rows() 可以在使用 mysql_real_query()mysql_query() 执行语句后立即调用。如果语句是 UPDATEDELETEINSERT,它将返回更改、删除或插入的行的数量。对于 SELECT 语句,mysql_affected_rows() 的工作方式类似于 mysql_num_rows()

对于 UPDATE 语句,默认情况下,受影响的行数是实际更改的行数。如果您在连接到 mysqld 时将 CLIENT_FOUND_ROWS 标志指定给 mysql_real_connect(),受影响的行数将是 找到 的行数;也就是说,与 WHERE 子句匹配的行数。

对于 REPLACE 语句,如果新行替换了旧行,则受影响的行数为 2,因为在这种情况下,在删除重复行后插入了一行。

对于 INSERT ... ON DUPLICATE KEY UPDATE 语句,每行的受影响的行数为 1(如果该行作为新行插入)、2(如果更新了现有行)和 0(如果现有行设置为其当前值)。如果您指定了 CLIENT_FOUND_ROWS 标志,则如果将现有行设置为其当前值,受影响的行数将为 1(而不是 0)。

CALL 存储过程语句之后,mysql_affected_rows() 返回它将在过程内部执行的最后一个语句返回的值,或者如果该语句将返回 -1,则返回 0。在过程中,可以使用 SQL 级的 ROW_COUNT() 来获取单个语句的受影响的行数。

mysql_affected_rows() 返回许多语句的有意义的值。有关详细信息,请参阅 ROW_COUNT()信息函数 中的描述。

返回值

大于零的整数表示受影响或检索的行数。零表示对于 UPDATE 语句没有更新记录,没有行与查询中的 WHERE 子句匹配,或者尚未执行任何查询。-1 表示查询返回错误,或者对于 SELECT 查询,在调用 mysql_store_result() 之前调用了 mysql_affected_rows()

因为 mysql_affected_rows() 返回无符号值,所以可以通过将返回值与 (uint64_t)-1(或与 (uint64_t)~0 等效)进行比较来检查 -1。

错误

无。

示例

char *stmt = "UPDATE products SET cost=cost*1.25
              WHERE group=10";
mysql_query(&mysql,stmt);
printf("%ld products updated",
       (long) mysql_affected_rows(&mysql));