MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

MariaDB ROW_COUNT() explicada


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.