MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

MariaDB ROW_COUNT() expliqué

Dans MariaDB, ROW_COUNT() est une fonction intégrée qui renvoie le nombre de lignes mises à jour, insérées ou supprimées par l'instruction précédente.

La valeur renvoyée par ROW_COUNT() est le même que le nombre de lignes que le mysql le client affiche et la valeur de mysql_affected_rows() Fonction API C.

Syntaxe

La syntaxe ressemble à ceci :

ROW_COUNT()

Aucun argument n'est requis ou accepté.

Exemples

Énoncés DDL

Pour les instructions DDL (y compris TRUNCATE ) et pour les autres instructions qui ne renvoient aucun jeu de résultats (comme USE , DO , SIGNAL ou DEALLOCATE PREPARE ), le ROW_COUNT() la fonction renvoie 0 .

Créons un tableau :

CREATE OR REPLACE TABLE guest (
  guest_id INT NOT NULL AUTO_INCREMENT,
  guest_name VARCHAR(255) NOT NULL,
  PRIMARY KEY (guest_id)
);

Résultat :

Query OK, 0 rows affected (0.046 sec)

Et exécutez ROW_COUNT() :

SELECT ROW_COUNT();

Résultat :

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

Comme prévu, 0 est renvoyé, car aucune ligne n'a été affectée.

Déclarations DML

Pour les instructions DML autres que SELECT et pour ALTER TABLE , le ROW_COUNT() La fonction renvoie le nombre de lignes affectées.

Voici quelques exemples.

Insérer des données

Insérons maintenant quelques lignes :

INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');

Résultat :

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)

Chaque instruction a entraîné une ligne affectée.

Et exécutons ROW_COUNT() encore :

SELECT ROW_COUNT();

Résultat :

+-------------+
| ROW_COUNT() |
+-------------+
|           1 |
+-------------+

Cela renvoie 1 car c'est le nombre de lignes qui ont été affectées dans la dernière instruction. Même si nous avons affecté trois lignes, il a fallu trois instructions pour le faire (chaque instruction insérant une seule ligne, et ROW_COUNT() rapporte uniquement sur le dernier relevé).

Mettre à jour les données

Mettons maintenant à jour les données des trois lignes :

UPDATE guest
SET guest_name = 'Homer';

Résultat :

Query OK, 2 rows affected (0.008 sec)
Rows matched: 3  Changed: 2  Warnings: 0

Mon mariadb client me dit que bien que trois lignes correspondent aux critères, seules deux lignes ont été modifiées. C'est parce que la première ligne contient déjà Homer , c'est aussi ce vers quoi nous essayons de le mettre à jour.

Voyons ce que ROW_COUNT() renvoie :

SELECT ROW_COUNT();

Résultat :

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

Comme prévu, il renvoie 2 , car c'est le nombre de lignes qui ont été mises à jour.

Énoncés de l'ensemble de résultats

Pour les instructions qui renvoient un ensemble de résultats (comme SELECT , SHOW , DESC ou HELP ), le ROW_COUNT() la fonction renvoie -1 , même lorsque le jeu de résultats est vide. Ceci est également vrai pour les instructions administratives, telles que OPTIMIZE .

Exemple :

SELECT * FROM guest;

Résultat :

+----------+------------+
| guest_id | guest_name |
+----------+------------+
|        1 | Homer      |
|        2 | Homer      |
|        3 | Homer      |
+----------+------------+
3 rows in set (0.000 sec)

Appelez maintenant ROW_COUNT() encore :

SELECT ROW_COUNT();

Résultat :

+-------------+
| ROW_COUNT() |
+-------------+
|          -1 |
+-------------+

Clés étrangères et déclencheurs

Notez que ROW_COUNT() ne prend pas en compte les lignes qui ne sont pas directement supprimées/mises à jour par la dernière instruction. Cela signifie que les lignes supprimées par des clés étrangères ou des déclencheurs ne sont pas comptées.

Plus d'informations

Consultez la documentation de MariaDB pour plus de détails et quelques autres éléments à prendre en compte lors de l'utilisation de cette fonction.