文档首页
MySQL 8.4 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));