В 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 за повече подробности и няколко други неща, които трябва да имате предвид, когато използвате тази функция.