在 MySQL 中,ROW_COUNT() 函数用来返回当前执行的SQL语句更新的行数。
ROW_COUNT() 函数返回一个值,如下所示:
DDL 语句:该函数返回 0,这适用于 CREATE TABLE 或 DROP TABLE 等 SQL 语句。
SELECT 以外的 DML 语句:该函数返回受影响的行数。这适用于 UPDATE、INSERT 或 DELETE 等语句(如前所述),但现在也适用于 ALTER TABLE 和 LOAD DATA 等语句。
SELECT:如果语句返回结果集,则为该函数返回 -1。否则,该函数返回 “受影响” 的行数。例如,对于 SELECT * FROM t1,ROW_COUNT() 返回 -1。 对于 SELECT * FROM t1 INTO OUTFILE 'file_name',ROW_COUNT() 返回写入文件的行数。
信号声明(SIGNAL):该函数返回 0。
对于 UPDATE 语句,默认情况下,affected-rows 值是实际更改的行数。如果在连接到 mysqld 时将 CLIENT_FOUND_ROWS 标志指定给 mysql_real_connect(),那么受影响的行值是 “找到” 的行数;也就是说,由 WHERE 子句匹配。
对于 REPLACE 语句,如果新行替换了旧行,则受影响的行值为 2。因为在这种情况下,在删除重复项后插入了一行。
对于 INSERT ... ON DUPLICATE KEY UPDATE 语句,如果将行作为新行插入,则每行的受影响行值为 1。如果更新现有行,则为 2。如果将现有行设置为其当前值,则为 0。如果您指定 CLIENT_FOUND_ROWS 标志,如果现有行设置为其当前值,则受影响的行值为 1(而不是 0)。
ROW_COUNT() 值类似于来自 mysql_affected_rows() C API 函数的值以及 mysql 客户端在执行语句后显示的行数。
(1)使用 ROW_COUNT() 函数返回前面执行的 INSERT SQL 语句受影响的数量,如下:
mysql> insert t_test(name) values('name1'),('name2'),('name3'); Query OK, 3 rows affected (0.01 sec) Records: 3 Duplicates: 0 Warnings: 0 mysql> select ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 3 | +-------------+ 1 row in set (0.03 sec)
由运行结果可知,上面的 ROW_COUNT() 函数返回 INSERT SQL 语句受影响行数为 3。
(2)使用 ROW_COUNT 函数返回前面执行的 DELETE SQL 语句受影响的数量,如下:
mysql> select * from t_test; +----+-------+ | id | name | +----+-------+ | 1 | name1 | | 2 | name2 | | 3 | name3 | +----+-------+ 3 rows in set (0.04 sec) mysql> delete from t_test where name in('name1','name3'); Query OK, 2 rows affected (0.00 sec) mysql> select ROW_COUNT(); +-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+ 1 row in set (0.04 sec)
由运行结果可知,上面的 ROW_COUNT() 函数返回 DELETE SQL 语句受影响行数为 3。