sql >> Database >  >> RDS >> MariaDB

MariaDB ROW_COUNT() uitgelegd

In MariaDB, ROW_COUNT() is een ingebouwde functie die het aantal rijen retourneert dat is bijgewerkt, ingevoegd of verwijderd door de voorgaande instructie.

De waarde die wordt geretourneerd door ROW_COUNT() is hetzelfde als het aantal rijen dat de mysql client wordt weergegeven en de waarde van de mysql_affected_rows() C API-functie.

Syntaxis

De syntaxis gaat als volgt:

ROW_COUNT()

Er zijn geen argumenten vereist of geaccepteerd.

Voorbeelden

DDL-verklaringen

Voor DDL-statements (inclusief TRUNCATE ) en voor andere instructies die geen resultaatset opleveren (zoals USE , DO , SIGNAL of DEALLOCATE PREPARE ), de ROW_COUNT() functie retourneert 0 .

Laten we een tabel maken:

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

Resultaat:

Query OK, 0 rows affected (0.046 sec)

En voer ROW_COUNT() . uit :

SELECT ROW_COUNT();

Resultaat:

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

Zoals verwacht, 0 wordt geretourneerd, omdat er nul rijen zijn aangetast.

DML-verklaringen

Voor andere DML-instructies dan SELECT en voor ALTER TABLE , de ROW_COUNT() functie retourneert het aantal betrokken rijen.

Hieronder staan ​​enkele voorbeelden.

Gegevens invoegen

Laten we nu enkele rijen invoegen:

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

Resultaat:

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)

Elke uitspraak had tot gevolg dat één rij werd beïnvloed.

En laten we ROW_COUNT() uitvoeren nogmaals:

SELECT ROW_COUNT();

Resultaat:

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

Dit retourneert 1 omdat dat is hoeveel rijen werden beïnvloed in de laatste verklaring. Ook al hadden we invloed op drie rijen, er waren drie instructies nodig om dat te doen (elke instructie voegde slechts één rij in en ROW_COUNT() rapporteert alleen over de laatste verklaring).

Gegevens bijwerken

Laten we nu de gegevens in alle drie de rijen bijwerken:

UPDATE guest
SET guest_name = 'Homer';

Resultaat:

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

Mijn mariadb cliënt vertelt me ​​dat hoewel drie rijen aan de criteria voldeden, er slechts twee rijen waren gewijzigd. Dit komt omdat de eerste rij al Homer . bevat , dat is ook waar we het naar proberen te updaten.

Laten we eens kijken wat ROW_COUNT() retourneert:

SELECT ROW_COUNT();

Resultaat:

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

Zoals verwacht, retourneert het 2 , want dat is het aantal rijen dat daadwerkelijk is bijgewerkt.

Resultatenset-statements

Voor instructies die een resultatenset retourneren (zoals SELECT , SHOW , DESC of HELP ), de ROW_COUNT() functie retourneert -1 , zelfs als de resultatenset leeg is. Dit geldt ook voor administratieve verklaringen, zoals OPTIMIZE .

Voorbeeld:

SELECT * FROM guest;

Resultaat:

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

Bel nu ROW_COUNT() nogmaals:

SELECT ROW_COUNT();

Resultaat:

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

Buitenlandse sleutels en triggers

Merk op dat ROW_COUNT() houdt geen rekening met rijen die niet direct zijn verwijderd/geüpdatet door de laatste instructie. Dit betekent dat rijen die door externe sleutels of triggers zijn verwijderd, niet worden meegeteld.

Meer informatie

Zie de MariaDB-documentatie voor meer details en een paar andere dingen waar u op moet letten bij het gebruik van deze functie.


  1. Virtuele kolommen en functionele indexen

  2. Het Halloween-probleem – Deel 4

  3. CONVERTEREN() in SQL Server

  4. Hoe te voorkomen dat dubbele records worden ingevoegd in SQL INSERT-query (5 eenvoudige manieren)