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.