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.