In MariaDB ROW_COUNT()
ist eine integrierte Funktion, die die Anzahl der Zeilen zurückgibt, die durch die vorhergehende Anweisung aktualisiert, eingefügt oder gelöscht wurden.
Der von ROW_COUNT()
zurückgegebene Wert ist die gleiche wie die Zeilenanzahl, die mysql
Client zeigt und den Wert aus mysql_affected_rows()
an C-API-Funktion.
Syntax
Die Syntax lautet wie folgt:
ROW_COUNT()
Es sind keine Argumente erforderlich oder akzeptiert.
Beispiele
DDL-Anweisungen
Für DDL-Anweisungen (einschließlich TRUNCATE
) und für andere Anweisungen, die keine Ergebnismenge zurückgeben (wie USE
, DO
, SIGNAL
oder DEALLOCATE PREPARE
), die ROW_COUNT()
Funktion gibt 0
zurück .
Lassen Sie uns eine Tabelle erstellen:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Ergebnis:
Query OK, 0 rows affected (0.046 sec)
Und führen Sie ROW_COUNT()
aus :
SELECT ROW_COUNT();
Ergebnis:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Wie erwartet, 0
zurückgegeben, da null Zeilen betroffen waren.
DML-Anweisungen
Für andere DML-Anweisungen als SELECT
und für ALTER TABLE
, die ROW_COUNT()
Funktion gibt die Anzahl der betroffenen Zeilen zurück.
Nachfolgend finden Sie einige Beispiele.
Daten einfügen
Lassen Sie uns nun einige Zeilen einfügen:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Ergebnis:
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)
Jede Anweisung führte dazu, dass eine Zeile betroffen war.
Und lassen Sie uns ROW_COUNT()
ausführen nochmal:
SELECT ROW_COUNT();
Ergebnis:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Dies gibt 1
zurück denn so viele Zeilen waren in der letzten Anweisung betroffen. Obwohl wir drei Zeilen betroffen haben, waren dafür drei Anweisungen erforderlich (jede Anweisung fügte nur eine Zeile ein, und ROW_COUNT()
berichtet nur über die letzte Aussage).
Daten aktualisieren
Jetzt aktualisieren wir die Daten in allen drei Zeilen:
UPDATE guest
SET guest_name = 'Homer';
Ergebnis:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Meine mariadb
Der Kunde teilt mir mit, dass, obwohl drei Zeilen den Kriterien entsprachen, nur zwei Zeilen geändert wurden. Das liegt daran, dass die erste Zeile bereits Homer
enthält , auf das wir auch versuchen, es zu aktualisieren.
Mal sehen, was ROW_COUNT()
ist gibt zurück:
SELECT ROW_COUNT();
Ergebnis:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Wie erwartet wird 2
zurückgegeben , denn so viele Zeilen wurden tatsächlich aktualisiert.
Ergebnissatzanweisungen
Für Anweisungen, die eine Ergebnismenge zurückgeben (wie SELECT
, SHOW
, DESC
oder HELP
), die ROW_COUNT()
Funktion gibt -1
zurück , auch wenn die Ergebnismenge leer ist. Dies gilt auch für administrative Anweisungen wie OPTIMIZE
.
Beispiel:
SELECT * FROM guest;
Ergebnis:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Rufen Sie nun ROW_COUNT()
auf nochmal:
SELECT ROW_COUNT();
Ergebnis:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Fremdschlüssel &Trigger
Beachten Sie, dass ROW_COUNT()
berücksichtigt keine Zeilen, die nicht direkt durch die letzte Anweisung gelöscht/aktualisiert wurden. Das bedeutet, dass durch Fremdschlüssel oder Trigger gelöschte Zeilen nicht gezählt werden.
Weitere Informationen
Weitere Informationen und einige andere Dinge, die Sie bei der Verwendung dieser Funktion beachten sollten, finden Sie in der MariaDB-Dokumentation.