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
UPDATEsă numere toate rândurile găsite deWHERE. 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(*).