sql >> Base de Datos >  >> RDS >> MariaDB

Explicación de MariaDB ROW_COUNT()

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.