uint64_t
mysql_affected_rows(MYSQL *mysql)
mysql_affected_rows()可以在使用
mysql_real_query()or
执行语句后立即调用mysql_query()。它返回最后一个语句更改、删除或插入的行数(如果它是UPDATE、
DELETE或
INSERT)。对于
SELECT语句,
mysql_affected_rows()就像mysql_num_rows().
对于UPDATE语句,默认情况下受影响的行值是实际更改的行数。如果
在连接到mysqldCLIENT_FOUND_ROWS时将标志
指定为,则受影响的行值是“找到”的行数;也就是说,由子句匹配。
mysql_real_connect()WHERE
对于REPLACE语句,如果新行替换旧行,则 affected-rows 值为 2,因为在这种情况下,删除重复行后插入一行。
对于
INSERT
... ON DUPLICATE KEY UPDATE语句,如果该行作为新行插入,则每行的受影响行值为 1,如果更新现有行,则为 2,如果现有行设置为其当前值,则为 0。如果您指定
CLIENT_FOUND_ROWS标志,并且现有行设置为其当前值,则受影响的行值为 1(而不是 0)。
在CALL存储过程的语句之后,
mysql_affected_rows()返回它将为过程中执行的最后一条语句返回的值,或者0如果该语句将返回-1。在该过程中,您可以
ROW_COUNT()在 SQL 级别使用它来获取各个语句的 affected-rows 值。
mysql_affected_rows()为范围广泛的语句返回一个有意义的值。详见
信息函数ROW_COUNT()中
的说明。
大于零的整数表示受影响或检索的行数。零表示没有为UPDATE
语句更新记录,没有行与WHERE查询中的子句匹配,或者尚未执行任何查询。-1 表示查询返回错误,或者对于
SELECT查询,
mysql_affected_rows()在调用
mysql_store_result().
因为mysql_affected_rows()
返回一个无符号值,所以您可以通过将返回值与(uint64_t)-1(或与
(uint64_t)~0,这是等效的)进行比较来检查是否为 -1。