In MariaDB, ROW_COUNT()
è una funzione incorporata che restituisce il numero di righe aggiornate, inserite o eliminate dall'istruzione precedente.
Il valore restituito da ROW_COUNT()
è lo stesso del conteggio delle righe di mysql
client visualizza e il valore da mysql_affected_rows()
Funzione API C.
Sintassi
La sintassi è questa:
ROW_COUNT()
Nessun argomento è richiesto o accettato.
Esempi
Dichiarazioni DDL
Per le istruzioni DDL (incluso TRUNCATE
) e per altre istruzioni che non restituiscono alcun set di risultati (come USE
, DO
, SIGNAL
o DEALLOCATE PREPARE
), il ROW_COUNT()
la funzione restituisce 0
.
Creiamo una tabella:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Risultato:
Query OK, 0 rows affected (0.046 sec)
Ed esegui ROW_COUNT()
:
SELECT ROW_COUNT();
Risultato:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Come previsto, 0
viene restituito, perché zero righe sono state interessate.
Dichiarazioni DML
Per istruzioni DML diverse da SELECT
e per ALTER TABLE
, il ROW_COUNT()
la funzione restituisce il numero di righe interessate.
Di seguito sono riportati alcuni esempi.
Inserisci dati
Ora inseriamo alcune righe:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Risultato:
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)
Ogni istruzione ha comportato l'effetto di una riga.
Ed eseguiamo ROW_COUNT()
ancora:
SELECT ROW_COUNT();
Risultato:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Questo restituisce 1
perché questo è il numero di righe interessate nell'ultima istruzione. Anche se abbiamo interessato tre righe, ci sono volute tre istruzioni per farlo (ogni istruzione ha inserito solo una riga e ROW_COUNT()
riporta solo l'ultima affermazione).
Aggiorna dati
Ora aggiorniamo i dati in tutte e tre le righe:
UPDATE guest
SET guest_name = 'Homer';
Risultato:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Il mio mariadb
il client mi dice che sebbene tre righe corrispondessero ai criteri, solo due righe sono state modificate. Questo perché la prima riga contiene già Homer
, che è anche ciò a cui stiamo cercando di aggiornarlo.
Vediamo cosa ROW_COUNT()
resi:
SELECT ROW_COUNT();
Risultato:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Come previsto, restituisce 2
, perché è il numero di righe effettivamente aggiornate.
Dichiarazioni sulla serie di risultati
Per le istruzioni che restituiscono un set di risultati (come SELECT
, SHOW
, DESC
o HELP
), il ROW_COUNT()
la funzione restituisce -1
, anche quando il set di risultati è vuoto. Questo vale anche per le istruzioni amministrative, come OPTIMIZE
.
Esempio:
SELECT * FROM guest;
Risultato:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Ora chiama ROW_COUNT()
ancora:
SELECT ROW_COUNT();
Risultato:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Chiavi e trigger esteri
Nota che ROW_COUNT()
non tiene conto delle righe che non vengono cancellate/aggiornate direttamente dall'ultima istruzione. Ciò significa che le righe eliminate da chiavi esterne o attivatori non vengono conteggiate.
Maggiori informazioni
Consulta la documentazione di MariaDB per maggiori dettagli e alcune altre cose a cui prestare attenzione quando si utilizza questa funzione.