V MariaDB, ROW_COUNT() je vestavěná funkce, která vrací počet řádků aktualizovaných, vložených nebo odstraněných předchozím příkazem.
Hodnota vrácená ROW_COUNT() je stejný jako počet řádků mysql klient zobrazí a hodnotu z mysql_affected_rows() C API funkce.
Syntaxe
Syntaxe vypadá takto:
ROW_COUNT() Žádné argumenty nejsou vyžadovány ani přijímány.
Příklady
Příkazy DDL
Pro příkazy DDL (včetně TRUNCATE ) a pro další příkazy, které nevrací žádnou sadu výsledků (například USE , DO , SIGNAL nebo DEALLOCATE PREPARE ), ROW_COUNT() funkce vrací 0 .
Vytvoříme tabulku:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
); Výsledek:
Query OK, 0 rows affected (0.046 sec)
A spusťte ROW_COUNT() :
SELECT ROW_COUNT(); Výsledek:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Podle očekávání 0 je vráceno, protože nebyly ovlivněny žádné řádky.
Prohlášení DML
Pro příkazy DML jiné než SELECT a pro ALTER TABLE , ROW_COUNT() funkce vrací počet ovlivněných řádků.
Níže je několik příkladů.
Vložit data
Nyní vložíme několik řádků:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge'); Výsledek:
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ždý příkaz vedl k ovlivnění jednoho řádku.
A spusťte ROW_COUNT() znovu:
SELECT ROW_COUNT(); Výsledek:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
To vrátí 1 protože tolik řádků bylo ovlivněno v posledním příkazu. I když jsme ovlivnili tři řádky, bylo k tomu potřeba tři příkazy (každý příkaz vložil pouze jeden řádek a ROW_COUNT() pouze zprávy o posledním výpisu).
Aktualizovat data
Nyní aktualizujme data ve všech třech řádcích:
UPDATE guest
SET guest_name = 'Homer'; Výsledek:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Můj mariadb klient mi říká, že ačkoli tři řádky odpovídaly kritériím, byly změněny pouze dva řádky. Důvodem je, že první řádek již obsahuje Homer , na což se také snažíme aktualizovat.
Podívejme se, co ROW_COUNT() vrátí:
SELECT ROW_COUNT(); Výsledek:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Podle očekávání vrací 2 , protože tolik řádků bylo skutečně aktualizováno.
Výkazy sady výsledků
Pro příkazy, které vracejí sadu výsledků (například SELECT , SHOW , DESC nebo HELP ), ROW_COUNT() funkce vrací -1 , i když je sada výsledků prázdná. To platí také pro administrativní příkazy, jako je OPTIMIZE .
Příklad:
SELECT * FROM guest; Výsledek:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Nyní zavolejte ROW_COUNT() znovu:
SELECT ROW_COUNT(); Výsledek:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Zahraniční klíče a spouštěče
Všimněte si, že ROW_COUNT() nebere v úvahu řádky, které nejsou přímo vymazány/aktualizovány posledním výpisem. To znamená, že řádky odstraněné cizími klíči nebo spouštěči se nezapočítávají.
Další informace
Další podrobnosti a několik dalších věcí, které je třeba mít na paměti při používání této funkce, najdete v dokumentaci MariaDB.