En MariaDB, ROW_COUNT()
es una función integrada que devuelve el número de filas actualizadas, insertadas o eliminadas por la instrucción anterior.
El valor devuelto por ROW_COUNT()
es el mismo que el recuento de filas que mysql
muestra el cliente y el valor de mysql_affected_rows()
Función API C.
Sintaxis
La sintaxis es así:
ROW_COUNT()
No se requieren ni se aceptan argumentos.
Ejemplos
Declaraciones DDL
Para sentencias DDL (incluyendo TRUNCATE
) y para otras declaraciones que no devuelven ningún conjunto de resultados (como USE
, DO
, SIGNAL
o DEALLOCATE PREPARE
), el ROW_COUNT()
la función devuelve 0
.
Vamos a crear una tabla:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Resultado:
Query OK, 0 rows affected (0.046 sec)
Y ejecuta ROW_COUNT()
:
SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Como era de esperar, 0
se devuelve, porque cero filas se vieron afectadas.
Declaraciones DML
Para sentencias DML que no sean SELECT
y para ALTER TABLE
, el ROW_COUNT()
la función devuelve el número de filas afectadas.
A continuación se muestran algunos ejemplos.
Insertar datos
Ahora insertemos algunas filas:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Resultado:
MariaDB [Zap]> INSERT INTO guest (guest_name) VALUES ('Homer'); Query OK, 1 row affected (0.037 sec) MariaDB [Zap]> INSERT INTO guest (guest_name) VALUES ('Bart'); Query OK, 1 row affected (0.001 sec) MariaDB [Zap]> INSERT INTO guest (guest_name) VALUES ('Marge'); Query OK, 1 row affected (0.002 sec)
Cada declaración resultó en una fila afectada.
Y ejecutemos ROW_COUNT()
de nuevo:
SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Esto devuelve 1
porque esa es la cantidad de filas que se vieron afectadas en la última declaración. Aunque afectamos a tres filas, se necesitaron tres declaraciones para hacerlo (cada declaración insertó solo una fila y ROW_COUNT()
solo informa sobre la última declaración).
Actualizar datos
Ahora actualicemos los datos en las tres filas:
UPDATE guest
SET guest_name = 'Homer';
Resultado:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Mi mariadb
El cliente me dice que aunque tres filas coincidieron con los criterios, solo se cambiaron dos filas. Esto se debe a que la primera fila ya contiene Homer
, que también es a lo que estamos tratando de actualizarlo.
Veamos qué ROW_COUNT()
devuelve:
SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Como era de esperar, devuelve 2
, porque esa es la cantidad de filas que se actualizaron realmente.
Declaraciones de conjuntos de resultados
Para declaraciones que devuelven un conjunto de resultados (como SELECT
, SHOW
, DESC
o HELP
), el ROW_COUNT()
la función devuelve -1
, incluso cuando el conjunto de resultados está vacío. Esto también es cierto para declaraciones administrativas, como OPTIMIZE
.
Ejemplo:
SELECT * FROM guest;
Resultado:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Ahora llama a ROW_COUNT()
de nuevo:
SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Claves foráneas y disparadores
Tenga en cuenta que ROW_COUNT()
no tiene en cuenta las filas que no se eliminan/actualizan directamente por la última declaración. Esto significa que las filas eliminadas por claves foráneas o disparadores no se cuentan.
Más información
Consulte la documentación de MariaDB para obtener más detalles y algunas otras cosas que debe tener en cuenta al usar esta función.