ROW_COUNT() în MySQL

Câte rânduri a modificat instrucțiunea anterioară (INSERT, UPDATE, DELETE).

Sintaxă
ROW_COUNT()

Ce face ROW_COUNT()

ROW_COUNT() returnează numărul de rânduri afectate de instrucțiunea executată chiar înainte: rândurile inserate, modificate sau șterse. Este același număr pe care clientul mysql îl afișează în mesajul Query OK, 3 rows affected.

La UPDATE se numără doar rândurile schimbate efectiv: un rând care avea deja valoarea nouă nu se numără. După un SELECT care afișează rânduri, valoarea este -1, iar după CREATE TABLE sau DROP TABLE este 0. La INSERT ... ON DUPLICATE KEY UPDATE, un rând actualizat se numără de două ori.

Ce returnează

Un număr întreg (poate fi -1).

Exemple

Exemplele de pe această pagină pornesc de la datele de mai jos. Rulează mai întâi acest cod, apoi exemplul.

CREATE TABLE produse (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nume VARCHAR(30),
  pret INT,
  stoc INT
);

INSERT INTO produse (nume, pret, stoc) VALUES
  ('Laptop', 3500, 4),
  ('Mouse', 80, 25),
  ('Birou', 900, 0),
  ('Scaun', 650, 7),
  ('Monitor', 1200, 3);

Exemplul 1: După UPDATE și DELETE

UPDATE produse SET pret = pret + 10 WHERE stoc > 0;
SELECT ROW_COUNT() AS modificate;

DELETE FROM produse WHERE stoc = 0;
SELECT ROW_COUNT() AS sterse;

Rezultat

+------------+
| modificate |
+------------+
|          4 |
+------------+
+--------+
| sterse |
+--------+
|      1 |
+--------+

Exemplul 2: UPDATE fără schimbare și SELECT

Mouse-ul are deja prețul 80, deci rândul nu se schimbă. Apoi, după un SELECT, valoarea este -1.

UPDATE produse SET pret = 80 WHERE nume = 'Mouse';
SELECT ROW_COUNT() AS dupa_update;
SELECT ROW_COUNT() AS dupa_select;

Rezultat

+-------------+
| dupa_update |
+-------------+
|           0 |
+-------------+
+-------------+
| dupa_select |
+-------------+
|          -1 |
+-------------+

Greșeli frecvente

  • Citești ROW_COUNT() după altă instrucțiune decât cea care te interesează. Valoarea se referă doar la instrucțiunea imediat anterioară; salveaz-o într-o variabilă dacă ai nevoie de ea mai târziu.
  • Te aștepți ca UPDATE să numere toate rândurile găsite de WHERE. Se numără doar cele schimbate.

Comenzi înrudite

  • UPDATE: Modifică valorile din rândurile existente ale unui tabel.
  • DELETE: Șterge rânduri dintr-un tabel.
  • FOUND_ROWS(): Câte rânduri ar fi returnat ultimul SELECT fără LIMIT; depreciată, folosește COUNT(*).