O MySQL tem várias funções informativas que podem nos ajudar no desenvolvimento de aplicações ou procedures. Neste artigo descreverei funções importantes para sabermos em qual banco de dados estamos conectados, qual nossa thread (conexão), quantas linhas foram lidas, quantas linhas foram afetadas por determinado comando update/delete, capturar o último código atribuído a uma coluna auto_increment. Vamos ver algumas delas:

DATABASE(): retornará o banco de dados ao qual a conexão está ligada:

world-> SELECT database();

 

+—————+

| database() |

+—————+

| world           |

+—————+

1 row in set (0.00 sec)


 

CONNECTION_ID(): retornará o número de sua thread, ou se preferir: o número de sua sessão e/ou conexão ao banco de dados:

world-> select connection_id();

+———————+

| connection_id() |

+———————+

|                           2 |

+———————+

1 row in set (0.00 sec)

 

 – LAST_INSERT_ID(): Especialmente útil quando temos tabelas com AUTO INCREMENT, e, após uma nova inserção precisamos saber qual foi o último número incrementado. Para poder explicar melhor, vou criar uma tabela e fazer algumas inserções. Lembre-se, só funciona com AUTO INCREMENT:

world-> create table telefones

    -> (

    ->  codigo tinyint not null auto_increment,

    ->  nome varchar(25),

    ->  fone int,

    ->  primary key(codigo)

    -> );

Query OK, 0 rows affected (0.06 sec)

 

world-> insert into telefones values (null, ‘Andre Barros’, 88880102);

Query OK, 1 row affected (0.00 sec)

 

world-> insert into telefones values (null, ‘Olivia Barros’, 88880103);

Query OK, 1 row affected (0.00 sec)

 

world-> insert into telefones values (null, ‘Juju Barros’, 88880104);

Query OK, 1 row affected (0.00 sec)

 

world-> select last_insert_id();

+——————–+

| last_insert_id() |

+——————–+

|                         3 |

+——————–+

1 row in set (0.02 sec)

 

world-> select * from telefones;

+———+——————–+————–+

| codigo | nome                | fone           |

+———+——————–+————–+

|           1 | Andre Barros  | 88880102 |

|           2 | Olivia Barros   | 88880103 |

|           3 | Juju Barros     | 88880104 |

+———+——————–+————–+

3 rows in set (0.00 sec)

Notem, que o LAST_INSERT_ID() retorna sempre o último número auto incrementado, do último insert da sessão corrente. Portanto, se vários inserts forem enviados para o servidor, e é necessário saber qual o “código” que ficou atribuído a cada linha é necessário um SELECT LAST_INSERT_ID() para cada insert.

 

FOUND_ROWS(): Esta função informa o número de linhas retornados por um determinado SELECT. É especialmente útil para evitarmos, por exemplo, de dar um SELECT COUNT(*) para descobrir quantas linhas são retornadas. Aproveitando o SELECT * FROM telefones da função acima:

world-> select found_rows();

+——————+

| found_rows() |

+——————+

|                       3 |

+——————+

1 row in set (0.00 sec)

Assim como o LAST_INSERT_ID(), o FOUND_ROWS() nos retorna a quantidade de linhas do último SELECT executado pela sessão corrente.

 

ROW_COUNT(): Retorna a quantidade de linhas foram afetadas, e somente estas. Funciona tanto com update ou delete.

 

world-> update telefones SET fone = 65110001 where codigo = 3;

Query OK, 1 row affected (0.00 sec)

Rows matched: 1  Changed: 1  Warnings: 0

 

world-> select row_count();

+—————-+

| row_count() |

+—————-+

|                    1 |

+—————-+

1 row in set (0.00 sec)

 

world-> update telefones SET fone = 65110001;

Query OK, 0 rows affected (0.00 sec)

Rows matched: 3  Changed: 0  Warnings: 0

 

world-> select row_count();

+—————-+

| row_count() |

+—————-+

|                    0 |

+—————-+

1 row in set (0.00 sec)

 

world-> delete from telefones where codigo >= 2;

Query OK, 2 rows affected (0.02 sec)

 

world-> select row_count();

+—————-+

| row_count() |

+—————-+

|                    2 |

+—————-+

1 row in set (0.00 sec)

Até mais!