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.