MariaDB
 sql >> Database >  >> RDS >> MariaDB

Spiegazione di MariaDB ROW_COUNT()

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.