No MariaDB,
ROW_COUNT()
é uma função interna que retorna o número de linhas atualizadas, inseridas ou excluídas pela instrução anterior. O valor retornado por
ROW_COUNT()
é o mesmo que a contagem de linhas que o mysql
cliente exibe e o valor do mysql_affected_rows()
Função da API C. Sintaxe
A sintaxe fica assim:
ROW_COUNT()
Nenhum argumento é necessário ou aceito.
Exemplos
Declarações DDL
Para instruções DDL (incluindo
TRUNCATE
) e para outras instruções que não retornam nenhum conjunto de resultados (como USE
, DO
, SIGNAL
ou DEALLOCATE PREPARE
), o ROW_COUNT()
função retorna 0
. Vamos criar uma tabela:
CREATE OR REPLACE TABLE guest (
guest_id INT NOT NULL AUTO_INCREMENT,
guest_name VARCHAR(255) NOT NULL,
PRIMARY KEY (guest_id)
);
Resultado:
Query OK, 0 rows affected (0.046 sec)
E execute
ROW_COUNT()
:SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | 0 | +-------------+
Como esperado,
0
é retornado, porque nenhuma linha foi afetada. Declarações DML
Para instruções DML diferentes de
SELECT
e para ALTER TABLE
, o ROW_COUNT()
A função retorna o número de linhas afetadas. Abaixo estão alguns exemplos.
Inserir dados
Agora vamos inserir algumas linhas:
INSERT INTO guest (guest_name) VALUES ('Homer');
INSERT INTO guest (guest_name) VALUES ('Bart');
INSERT INTO guest (guest_name) VALUES ('Marge');
Resultado:
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)
Cada instrução resultou em uma linha sendo afetada.
E vamos executar
ROW_COUNT()
novamente:SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | 1 | +-------------+
Isso retorna
1
porque é quantas linhas foram afetadas na última instrução. Embora tenhamos afetado três linhas, foram necessárias três instruções para fazer isso (cada instrução inseriu apenas uma linha e ROW_COUNT()
apenas relata a última declaração). Atualizar dados
Agora vamos atualizar os dados em todas as três linhas:
UPDATE guest
SET guest_name = 'Homer';
Resultado:
Query OK, 2 rows affected (0.008 sec) Rows matched: 3 Changed: 2 Warnings: 0
Meu
mariadb
cliente me diz que, embora três linhas correspondessem aos critérios, apenas duas linhas foram alteradas. Isso ocorre porque a primeira linha já contém Homer
, que também é para o qual estamos tentando atualizá-lo. Vamos ver o que
ROW_COUNT()
retorna:SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | 2 | +-------------+
Como esperado, ele retorna
2
, porque é quantas linhas foram realmente atualizadas. Declarações do conjunto de resultados
Para instruções que retornam um conjunto de resultados (como
SELECT
, SHOW
, DESC
ou HELP
), o ROW_COUNT()
função retorna -1
, mesmo quando o conjunto de resultados estiver vazio. Isso também vale para instruções administrativas, como OPTIMIZE
. Exemplo:
SELECT * FROM guest;
Resultado:
+----------+------------+ | guest_id | guest_name | +----------+------------+ | 1 | Homer | | 2 | Homer | | 3 | Homer | +----------+------------+ 3 rows in set (0.000 sec)
Agora chame
ROW_COUNT()
novamente:SELECT ROW_COUNT();
Resultado:
+-------------+ | ROW_COUNT() | +-------------+ | -1 | +-------------+
Chaves estrangeiras e gatilhos
Observe que
ROW_COUNT()
não leva em consideração as linhas que não são excluídas/atualizadas diretamente pela última instrução. Isso significa que as linhas excluídas por chaves estrangeiras ou gatilhos não são contadas. Mais informações
Consulte a documentação do MariaDB para obter mais detalhes e algumas outras coisas a serem lembradas ao usar esta função.