No último artigo, MySQL Básico - Atualizando dados , vimos como atualizar os dados já existentes em uma tabela MySQL, neste artigo aprenderemos como excluir, quando necessário, estes dados.
Primeiramente acesse o utilitário de linha de comando do MySQL, selecione a base de dados Locadora e verifique a existência da tabela filmes.
mysql> use locadora;
Database changed
mysql> show tables;
+--------------------+
| Tables_in_locadora |
+--------------------+
| filmes |
+--------------------+
1 row in set (0.05 sec)
O comando SQL que nos permite excluir dados no MySQL é o comando DELETE.
A sintaxe básica do comando DELETE é a seguinte:
DELETE FROM table_name [WHERE definição_where]
O comando DELETE é aplicado a uma tabela e pode ou não ter uma cláusula WHERE que restringe os registro nos quais ele atuará.
Este comando retorna o número de registros excluídos da tabela.
Se não for especificada uma cláusula WHERE o comando DELETE apagará todos os registros da tabela. Neste caso, no MySQL 3.23, o comando retorna zero.
A partir do MySQL 4.0.0 a exclusão em multi-tabelas é suportada.
Vamos para um exemplo prático. Primeiro visualizaremos que dados temos em nossa tabela filmes :
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 1 | King Kong | 2006 | Peter Jackson |
| 2 | Guerra dos Mundos | 2005 | Steven Spielberg |
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
3 rows in set (0.11 sec)
Como já haviamos visto em artigos anteriores o comando SELECT * FROM filmes retorna todos os registros da tabela filmes.
Neste caso temos três registros de filmes. Para ilustrar a utilização mais comum do comando DELETE vamos excluir um destes registros com o uso de algum critério. Poderíamos ter um critério único, que excluiria apenas um registro (por exemplo usando o campo id), ou um critério múltiplo, que poderia apagar mais de um registro (por exemplo, neste caso, usando o campo ano).
Vamos optar por usar o campo ano e excluir todos os filmes de anos anteriores a '2006', o comando seria o seguinte:
DELETE FROM filmes WHERE ano<2006;
mysql> DELETE FROM filmes WHERE ano<2006;
Query OK, 1 row affected (0.08 sec)
O comando DELETE foi executado com sucesso ("Query Ok") e afetou apenas uma linha (registro) da tabela, ou seja, existia apenas um filme na tabela com data anterior a '2006'.
Vamos ver como ficaram os registros:
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 1 | King Kong | 2006 | Peter Jackson |
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
2 rows in set (0.00 sec)
Fica claro que agora só temos filmes do ano de '2006' na tabela.
Vamos agora apagar um registro com base em um campo string. Executaremos o seguinte comando:
DELETE FROM filmes WHERE diretor LIKE '%Jackson'
mysql> DELETE FROM filmes WHERE diretor LIKE '%Jackson';
Query OK, 1 row affected (0.08 sec)
Neste caso o comando DELETE excluiria tudos os registros cujo campo diretor terminasse com o sobrenome 'Jackson' (todos os campos que se parecessem com isto).
Novamente o comando retornou sucesso e avisou que uma linha foi afetada, ou seja, tínhamos um registro que satisfazia a condição.
Vamos ver como ficaram os registros:
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
1 rows in set (0.00 sec)
Uma situação especial para o comando DELETE ocorre quando ele é aplicado sem nenhuma cláusula WHERE, neste caso todos os registros serão excluídos.
DELETE FROM filmes
mysql> DELETE FROM filmes;
Query OK, 1 row affected (0.00 sec)
Como só tínhamos um registro na tabela, somente uma linha foi afetada.
A tabela filmes agora se encontra vazia.
mysql> select * from filmes;
Empty set (0.00 sec)
Podemos facilmente restaurar os registros que existiam na tabela executando os três últimos comandos do anexo I.
mysql> INSERT INTO `filmes` VALUES (1, 'King Kong', 2006, '> 'Peter Jackson'); Query OK, 1 row affected (0.02 sec) mysql> INSERT INTO `filmes` VALUES (2, 'Guerra dos Mundos', '> 2005, 'Steven Spielberg'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO `filmes` VALUES (3, 'Harry Potter e o '>Cálise de Fogo', 2006,'Mike Newell'); Query OK, 1 row affected (0.00 sec)
A tabela filmes agora está como no começo deste artigo:
mysql> select * from filmes;
+----+---------------------------------+------+------------------+
| id | titulo | ano | diretor |
+----+---------------------------------+------+------------------+
| 1 | King Kong | 2006 | Peter Jackson |
| 2 | Guerra dos Mundos | 2005 | Steven Spielberg |
| 3 | Harry Potter e o Cálise de Fogo | 2006 | Mike Newell |
+----+---------------------------------+------+------------------+
3 rows in set (0.00 sec)
MySQL Básico - O comando UPDATE - Atualizando dados : 15/05/2006
Neste artigo demonstraremos como atualizar dados em tabelas no banco de...
MySQL Básico - O comando SELECT - Realizando consultas : 20/04/2006
Neste artigo demonstraremos como realizar consultas em uma tabela no banco...
MySQL Básico - O comando INSERT - Inserindo dados : 19/04/2006
Neste artigo demonstraremos como inserir dados em uma tabela MySQL, veremos...
MySQL Básico - O comando CREATE TABLE - Criando tabelas : 29/03/2006
Estamos iniciando uma série de artigos sobre o básico que se deve saber...