I MariaDB, ROW_COUNT()
er en indbygget funktion, der returnerer antallet af rækker opdateret, indsat eller slettet af den foregående sætning.
Værdien returneret af ROW_COUNT()
er det samme som rækkeantallet, som mysql
klient viser og værdien fra mysql_affected_rows()
C API-funktion.
Syntaks
Syntaksen ser sådan ud:
ROW_COUNT()
Ingen argumenter er påkrævet eller accepteret.
Eksempler
DDL-erklæringer
For DDL-sætninger (inklusive TRUNCATE
) og for andre udsagn, der ikke returnerer noget resultatsæt (såsom USE
, DO
, SIGNAL
eller DEALLOCATE PREPARE
), ROW_COUNT()
funktion returnerer 0
.
Lad os oprette en tabel:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Resultat:
Query OK, 0 rows affected (0.046 sec)
Og kør ROW_COUNT()
:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Som forventet, 0
returneres, fordi nul rækker blev påvirket.
DML-erklæringer
For andre DML-sætninger end SELECT
og for ALTER TABLE
, ROW_COUNT()
funktion returnerer antallet af berørte rækker.
Nedenfor er nogle eksempler.
Indsæt data
Lad os nu indsætte nogle rækker:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Resultat:
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)
Hver erklæring resulterede i, at én række blev påvirket.
Og lad os køre ROW_COUNT()
igen:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Dette returnerer 1
fordi det er hvor mange rækker der blev påvirket i den sidste erklæring. Selvom vi påvirkede tre rækker, tog det tre sætninger til at gøre det (hver sætning indsatte kun én række og ROW_COUNT()
kun rapporter om den sidste erklæring).
Opdater data
Lad os nu opdatere dataene i alle tre rækker:
UPDATE guest
SET guest_name = 'Homer';
Resultat:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Min mariadb
klient fortæller mig, at selvom tre rækker matchede kriterierne, blev kun to rækker ændret. Dette skyldes, at den første række allerede indeholder Homer
, hvilket også er det, vi forsøger at opdatere den til.
Lad os se hvad ROW_COUNT()
returnerer:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Som forventet returnerer den 2
, fordi det er hvor mange rækker der faktisk blev opdateret.
Resultatsæterklæringer
For udsagn, der returnerer et resultatsæt (såsom SELECT
, SHOW
, DESC
eller HELP
), ROW_COUNT()
funktion returnerer -1
, selv når resultatsættet er tomt. Dette gælder også for administrative erklæringer, såsom OPTIMIZE
.
Eksempel:
SELECT * FROM guest;
Resultat:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Kald nu ROW_COUNT()
igen:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Udenlandske nøgler og udløsere
Bemærk, at ROW_COUNT()
tager ikke højde for rækker, der ikke direkte slettes/opdateres ved sidste opgørelse. Det betyder, at rækker slettet af fremmednøgler eller triggere ikke tælles.
Flere oplysninger
Se MariaDB-dokumentationen for flere detaljer og et par andre ting, du skal være opmærksom på, når du bruger denne funktion.