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

MariaDB ROW_COUNT() Forklaret

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.


  1. Import af en csv til mysql via kommandolinjen

  2. Sådan får du optegnelser fra sidste 24 timer i MySQL

  3. SIGN() Eksempler i SQL Server

  4. ændre størrelsen på datatype i sql