sql >> Databáze >  >> RDS >> MariaDB

MariaDB ROW_COUNT() Vysvětleno

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.


  1. Přehled parametrů připojení PostgreSQL 13 libpq sslpassword

  2. Jak provést vyhledávání rozlišující malá a velká písmena v klauzuli WHERE (používám SQL Server)?

  3. Jak nastavit strukturu indexu ElasticSearch s více vazbami entit

  4. Jak zkontrolovat, zda pole PostgreSQL obsahuje hodnotu