Spec-Zone.ru › MariaDB

ROW_COUNT

Синтаксис

ROW_COUNT()

Описание

ROW_COUNT() возвращает количество строк, обновленных, добавленных или удаленных предыдущим оператором. Это то же самое, что количество строк, отображаемое клиентом MariaDB, и значение из функции C API mysql_affected_rows().

В общем случае:

  • Для операторов, возвращающих результат (например, SELECT, SHOW, DESC или HELP), возвращает -1, даже если результат пуст. Это также верно для административных операторов, таких как OPTIMIZE.
  • Для операторов DML, отличных от SELECT, и для ALTER TABLE, возвращает количество затронутых строк.
  • Для операторов DDL (включая TRUNCATE) и для других операторов, не возвращающих результат (например, USE, DO, SIGNAL или DEALLOCATE PREPARE), возвращает 0.

Для UPDATE, количество затронутых строк по умолчанию равно количеству строк, которые были фактически изменены. Если флаг CLIENT_FOUND_ROWS функции mysql_real_connect() указан при подключении к mysqld, количество затронутых строк вместо этого будет равно количеству строк, соответствующих условию WHERE.

Для REPLACE, также учитываются удаленные строки. Таким образом, если REPLACE удаляет строку и добавляет новую, ROW_COUNT() возвращает 2.

Для INSERT ... ON DUPLICATE KEY, обновленные строки учитываются дважды. Таким образом, если INSERT добавляет новую строку и изменяет другую строку, ROW_COUNT() возвращает 3.

ROW_COUNT() не учитывает строки, которые не были непосредственно удалены/обновлены последним оператором. Это означает, что строки, удаленные внешними ключами или триггерами, не учитываются.

Предупреждение: Можно использовать ROW_COUNT() с подготовленными запросами, но необходимо вызывать его после EXECUTE, а не после DEALLOCATE PREPARE, так как количество строк для allocate prepare всегда равно 0.

Предупреждение: При использовании после оператора CALL эта функция возвращает количество строк, затронутых последним оператором в процедуре, а не всей процедурой.

Предупреждение: После INSERT DELAYED, ROW_COUNT() возвращает количество строк, которые вы пытались вставить, а не количество успешных записей.

Эта информация также доступна в области диагностики.

Операторы, использующие функцию ROW_COUNT(), не являются безопасными для репликации.

Примеры

CREATE TABLE t (A INT);

INSERT INTO t VALUES(1),(2),(3);

SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|           3 |
+-------------+

DELETE FROM t WHERE A IN(1,2);

SELECT ROW_COUNT(); 
+-------------+
| ROW_COUNT() |
+-------------+
|           2 |
+-------------+

Пример с подготовленными запросами:

SET @q = 'INSERT INTO t VALUES(1),(2),(3);';

PREPARE stmt FROM @q;

EXECUTE stmt;
Query OK, 3 rows affected (0.39 sec)
Records: 3  Duplicates: 0  Warnings: 0

SELECT ROW_COUNT();
+-------------+
| ROW_COUNT() |
+-------------+
|           3 |
+-------------+

См. также

  • FOUND_ROWS()
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/row_count/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API