В MariaDB, ROW_COUNT()
е вградена функция, която връща броя на редовете, актуализирани, вмъкнати или изтрити от предходния израз.
Стойността, върната от ROW_COUNT()
е същото като броя на редовете, който mysql
клиентски дисплеи и стойността от mysql_affected_rows()
C API функция.
Синтаксис
Синтаксисът е така:
ROW_COUNT()
Не се изискват и не се приемат аргументи.
Примери
DDL изявления
За DDL изрази (включително TRUNCATE
) и за други изрази, които не връщат никакъв набор от резултати (като USE
, DO
, SIGNAL
или DEALLOCATE PREPARE
), ROW_COUNT()
функцията връща 0
.
Нека създадем таблица:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Резултат:
Query OK, 0 rows affected (0.046 sec)
И стартирайте ROW_COUNT()
:
SELECT ROW_COUNT();
Резултат:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Както се очакваше, 0
се връща, защото са засегнати нула редове.
DML изявления
За DML изрази, различни от SELECT
и за ALTER TABLE
, ROW_COUNT()
функцията връща броя на засегнатите редове.
По-долу са дадени няколко примера.
Вмъкване на данни
Сега нека вмъкнем няколко реда:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Резултат:
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)
Всяко изявление доведе до засягане на един ред.
И нека изпълним ROW_COUNT()
отново:
SELECT ROW_COUNT();
Резултат:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Това връща 1
защото това е колко реда бяха засегнати в последното изявление. Въпреки че засегнахме три реда, бяха необходими три оператора, за да направим това (всяко изявление вмъкна само един ред и ROW_COUNT()
само доклади за последното изявление).
Актуализиране на данните
Сега нека актуализираме данните и в трите реда:
UPDATE guest
SET guest_name = 'Homer';
Резултат:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Моят mariadb
клиентът ми казва, че въпреки че три реда отговарят на критериите, само два реда са променени. Това е така, защото първият ред вече съдържа Homer
, което също се опитваме да го актуализираме.
Нека видим какво е ROW_COUNT()
връща:
SELECT ROW_COUNT();
Резултат:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Както се очаква, той връща 2
, защото това е колко реда всъщност бяха актуализирани.
Изявления за набор от резултати
За изрази, които връщат набор от резултати (като SELECT
, SHOW
, DESC
или HELP
), ROW_COUNT()
функцията връща -1
, дори когато резултатният набор е празен. Това важи и за административни изрази, като OPTIMIZE
.
Пример:
SELECT * FROM guest;
Резултат:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Сега извикайте ROW_COUNT()
отново:
SELECT ROW_COUNT();
Резултат:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Външни ключове и тригери
Обърнете внимание, че ROW_COUNT()
не взема предвид редове, които не са директно изтрити/актуализирани от последния израз. Това означава, че редовете, изтрити от външни ключове или тригери, не се отчитат.
Повече информация
Вижте документацията на MariaDB за повече подробности и няколко други неща, които трябва да имате предвид, когато използвате тази функция.