uint64_t
mysql_affected_rows(MYSQL *mysql)
mysql_affected_rows()
可以在使用 mysql_real_query()
或 mysql_query()
执行语句后立即调用。如果语句是 UPDATE
、DELETE
或 INSERT
,它将返回更改、删除或插入的行的数量。对于 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。