ROW_COUNT 获取更新的行数

在 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。

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号