W MariaDB, ROW_COUNT()
to wbudowana funkcja, która zwraca liczbę wierszy zaktualizowanych, wstawionych lub usuniętych przez poprzednią instrukcję.
Wartość zwrócona przez ROW_COUNT()
jest taka sama jak liczba wierszy, którą mysql
klient wyświetla i wartość z mysql_affected_rows()
Funkcja C API.
Składnia
Składnia wygląda tak:
ROW_COUNT()
Żadne argumenty nie są wymagane ani akceptowane.
Przykłady
Oświadczenia DDL
Dla instrukcji DDL (w tym TRUNCATE
) oraz dla innych instrukcji, które nie zwracają żadnego zestawu wyników (takich jak USE
, DO
, SIGNAL
lub DEALLOCATE PREPARE
), ROW_COUNT()
funkcja zwraca 0
.
Stwórzmy tabelę:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Wynik:
Query OK, 0 rows affected (0.046 sec)
I uruchom ROW_COUNT()
:
SELECT ROW_COUNT();
Wynik:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Zgodnie z oczekiwaniami 0
jest zwracany, ponieważ wpłynęło to na zero wierszy.
Oświadczenia DML
Dla instrukcji DML innych niż SELECT
i dla ALTER TABLE
, ROW_COUNT()
funkcja zwraca liczbę wierszy, których dotyczy problem.
Poniżej kilka przykładów.
Wstaw dane
Teraz wstawmy kilka wierszy:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Wynik:
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)
Każde stwierdzenie skutkowało zmianą jednego wiersza.
I uruchommy ROW_COUNT()
ponownie:
SELECT ROW_COUNT();
Wynik:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Zwraca 1
ponieważ na tyle wierszy wpłynęło ostatnie stwierdzenie. Mimo że wpłynęliśmy na trzy wiersze, do tego celu potrzebne były trzy instrukcje (każda instrukcja wstawiała tylko jeden wiersz i ROW_COUNT()
raporty tylko z ostatniego zestawienia).
Aktualizuj dane
Teraz zaktualizujmy dane we wszystkich trzech wierszach:
UPDATE guest
SET guest_name = 'Homer';
Wynik:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Moja mariadb
klient mówi mi, że chociaż trzy wiersze spełniały kryteria, tylko dwa wiersze zostały zmienione. Dzieje się tak, ponieważ pierwszy wiersz zawiera już Homer
, do czego również staramy się go zaktualizować.
Zobaczmy, co ROW_COUNT()
zwraca:
SELECT ROW_COUNT();
Wynik:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Zgodnie z oczekiwaniami, zwraca 2
, ponieważ tyle wierszy zostało faktycznie zaktualizowanych.
Oświadczenia dotyczące zestawu wyników
Dla instrukcji zwracających zestaw wyników (takich jak SELECT
, SHOW
, DESC
lub HELP
), ROW_COUNT()
funkcja zwraca -1
, nawet jeśli zestaw wyników jest pusty. Dotyczy to również instrukcji administracyjnych, takich jak OPTIMIZE
.
Przykład:
SELECT * FROM guest;
Wynik:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Teraz wywołaj ROW_COUNT()
ponownie:
SELECT ROW_COUNT();
Wynik:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Klucze obce i wyzwalacze
Pamiętaj, że ROW_COUNT()
nie uwzględnia wierszy, które nie są bezpośrednio usuwane/aktualizowane przez ostatnią instrukcję. Oznacza to, że wiersze usunięte przez klucze obce lub wyzwalacze nie są liczone.
Więcej informacji
Zapoznaj się z dokumentacją MariaDB, aby uzyskać więcej szczegółów i kilka innych rzeczy, o których należy pamiętać podczas korzystania z tej funkcji.