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.