I MariaDB, ROW_COUNT()
är en inbyggd funktion som returnerar antalet rader som uppdaterats, infogats eller tagits bort av föregående sats.
Värdet som returneras av ROW_COUNT()
är samma som radantalet som mysql
klienten visas och värdet från mysql_affected_rows()
C API-funktion.
Syntax
Syntaxen ser ut så här:
ROW_COUNT()
Inga argument krävs eller accepteras.
Exempel
DDL-utlåtanden
För DDL-satser (inklusive TRUNCATE
) och för andra satser som inte returnerar någon resultatuppsättning (som USE
, DO
, SIGNAL
eller DEALLOCATE PREPARE
), ROW_COUNT()
funktion returnerar 0
.
Låt oss skapa en tabell:
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)
Och kör ROW_COUNT()
:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Som förväntat, 0
returneras, eftersom noll rader påverkades.
DML-uttalanden
För andra DML-satser än SELECT
och för ALTER TABLE
, ROW_COUNT()
funktion returnerar antalet berörda rader.
Nedan finns några exempel.
Infoga data
Låt oss nu infoga några rader:
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)
Varje påstående resulterade i att en rad påverkades.
Och låt oss köra ROW_COUNT()
igen:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Detta returnerar 1
eftersom det var så många rader som påverkades i det senaste uttalandet. Även om vi påverkade tre rader tog det tre satser för att göra det (varje sats infogade bara en rad och ROW_COUNT()
rapporterar endast om det sista uttalandet).
Uppdatera data
Låt oss nu uppdatera data i alla tre raderna:
UPDATE guest
SET guest_name = 'Homer';
Resultat:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Min mariadb
klienten berättar att även om tre rader matchade kriterierna, ändrades bara två rader. Detta beror på att den första raden redan innehåller Homer
, vilket också är vad vi försöker uppdatera den till.
Låt oss se vad ROW_COUNT()
returnerar:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Som förväntat returnerar den 2
, eftersom det var så många rader som faktiskt uppdaterades.
Resultatuppsättningsutlåtanden
För satser som returnerar en resultatuppsättning (som SELECT
, SHOW
, DESC
eller HELP
), ROW_COUNT()
funktion returnerar -1
, även när resultatuppsättningen är tom. Detta gäller även för administrativa uttalanden, såsom OPTIMIZE
.
Exempel:
SELECT * FROM guest;
Resultat:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Ring nu ROW_COUNT()
igen:
SELECT ROW_COUNT();
Resultat:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Främmande nycklar och utlösare
Observera att ROW_COUNT()
tar inte hänsyn till rader som inte direkt raderas/uppdateras av det sista påståendet. Detta innebär att rader som tagits bort av främmande nycklar eller triggers inte räknas.
Mer information
Se MariaDB-dokumentationen för mer information och några andra saker att tänka på när du använder den här funktionen.