MariaDB ROW_COUNT() 函数的基础用法与实例

MariaDB ROW_COUNT() 函数用来返回上一条 INSERT、UPDATE、DELETE 语句影响的行数。

发布于

MariaDB ROW_COUNT() 函数用来返回上一条 INSERT、UPDATE、DELETE 语句影响的行数。它为编写脚本和存储过程提供了一种简单的方式来检查上一条数据更改语句的影响。

语法

MariaDB ROW_COUNT() 函数的语法如下:

ROW_COUNT()

该函数无需任何参数。如果上一条语句没有实际更新或删除任何行,则返回 0。 ROW_COUNT() 不能用于查询 SELECT 语句。

实例

检查 INSERT 语句影响行数

此示例演示如何使用 ROW_COUNT() 函数确认新插入的行数。

DROP TABLE IF EXISTS mytable;
CREATE TABLE mytable (i INT);

INSERT INTO mytable VALUES (1), (2);
SELECT ROW_COUNT();

以下是该语句的输出:

+-------------+
| ROW_COUNT() |
+-------------+
|           2 |
+-------------+

ROW_COUNT() 显示前一个 INSERT 语句插入了 2 行。

检查 UPDATE 语句影响行数

此示例展示如何使用 ROW_COUNT() 检查更新了多少行。

INSERT INTO mytable VALUES (3), (4), (5);

UPDATE mytable SET i = 10 WHERE i >= 4;
SELECT ROW_COUNT();

以下是该语句的输出:

+-------------+
| ROW_COUNT() |
+-------------+
|           2 |
+-------------+

ROW_COUNT() 表明前一个 UPDATE 语句更新了 2 行。

检查 DELETE 语句影响行数

此示例演示如何检查 DELETE 语句删除了多少行。

DELETE FROM mytable WHERE i = 10;
SELECT ROW_COUNT();

以下是该语句的输出:

+-------------+
| ROW_COUNT() |
+-------------+
|           2 |
+-------------+

前一个 DELETE 语句删除了 2 行。

无影响时返回 0

如果前一个语句没有更新任何行, ROW_COUNT() 将返回 0。

UPDATE mytable SET i = 5 WHERE i = 100;
SELECT ROW_COUNT();

以下是该语句的输出:

+-------------+
| ROW_COUNT() |
+-------------+
|           0 |
+-------------+

由于 mytable 中没有 i = 100 的行,所以 UPDATE 语句没有影响任何行。

在存储过程中使用

ROW_COUNT() 常用于存储过程或事件调度器中,检查语句的影响。

DROP PROCEDURE IF EXISTS update_i;
DELIMITER $$
CREATE PROCEDURE update_i()
BEGIN
  UPDATE mytable SET i = i+1;
  SELECT ROW_COUNT() AS 'Rows updated';
END$$
DELIMITER ;

CALL update_i();

以下是该语句的输出:

+--------------+
| Rows updated |
+--------------+
|            3 |
+--------------+

该存储过程使用 ROW_COUNT() 报告更新了多少记录行。

相关函数

以下是几个与 MariaDB ROW_COUNT() 相关的函数:

  • MariaDB LAST_INSERT_ID() 函数返回最后一个 AUTO_INCREMENT 值
  • MariaDB FOUND_ROWS() 函数返回包括符合条件的所有行数,即使只返回了部分结果。

结论

MariaDB ROW_COUNT() 函数提供了一种简单高效的方式来获得上一条 INSERT、UPDATE 或 DELETE 语句影响的实际行数。它可以让你很容易地跟踪数据更改的影响,并在脚本或存储过程中采取相应的措施。虽然单一功能,但在需要检查语句影响的情况下十分实用。与其他一些跟踪相关的函数和变量结合使用,可以编写更加健壮的逻辑。总之,ROW_COUNT() 是一个非常基础但很有价值的 DML 相关函数。