ROW_COUNT()¶
ROW_COUNT() 返回最近执行的 SQL 语句的 affected-row 状态:DML 语句返回受影响行数,结果集和失败语句返回
-1,DDL 使用语句特定的计数规则。
描述¶
ROW_COUNT() 报告当前会话中上一条语句的 affected-row 状态:
对于
INSERT、UPDATE、DELETE、REPLACE等 DML 语句,返回受影响的行数。在
SELECT等结果集语句或失败语句之后,返回-1;它不报告结果集包含的行数。大多数 DDL 语句返回
0,但部分语句返回该语句特定的影响行数。例如,CREATE TABLE ... AS SELECT返回插入的行数。DROP DATABASE返回删除的 catalog relation/对象数量,包括表、视图和序列;表上的索引不会额外增加计数。
其他 affected-row 规则如下:
语句 |
返回状态 |
|---|---|
插入新行的 |
|
替换冲突行的 |
|
普通 |
计算匹配行,包括被赋为原值、数据实际未变化的行。这与 MySQL 默认计算 changed rows 不同;MySQL 只有在客户端启用 |
|
插入返回 |
|
传播存储过程最终产生的非负 affected-row 计数。如果存储过程的最后一条语句返回结果集,后续 |
预处理的 |
在 |
该值反映的是紧邻的前一条语句,因此连续第二次执行 SELECT ROW_COUNT() 会返回 -1,因为它的前一条语句是上一次的 SELECT。
语法¶
ROW_COUNT()
返回值¶
返回整数形式的 affected-row 状态。结果集语句或失败语句之后返回 -1。DDL 通常返回 0,但 CREATE TABLE ... AS SELECT 会返回插入行数,DROP DATABASE 会返回删除的 catalog relation 数量。
参数释义¶
ROW_COUNT() 不接受任何参数。它以空函数调用形式执行,读取当前会话中紧邻前一条语句的受影响行数。
示例¶
DROP DATABASE IF EXISTS row_count_demo;
CREATE DATABASE row_count_demo;
USE row_count_demo;
CREATE TABLE t (id INT PRIMARY KEY, v INT);
INSERT INTO t VALUES (1, 10), (2, 20);
SELECT ROW_COUNT();
UPDATE t SET v = v + 1 WHERE id IN (1, 2);
SELECT ROW_COUNT();
DELETE FROM t WHERE id = 2;
SELECT ROW_COUNT();
SELECT v FROM t WHERE id = 1;
SELECT ROW_COUNT();
DROP DATABASE row_count_demo;
本示例中的四次 SELECT ROW_COUNT() 依次返回 2、2、1 和 -1。如果紧接着再次调用 ROW_COUNT(),仍返回 -1,因为它的前一条语句产生了结果集。