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。