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。

关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号