Resumo : neste tutorial, você aprenderá como usar a DROP TABLE
instrução MySQL para eliminar uma tabela do banco de dados.
DROP TABLE
Sintaxe de instrução MySQL
Para remover tabelas existentes, você usa a DROP TABLE
instrução MySQL.
Aqui está a sintaxe básica da DROP TABLE
instrução:
DROP [TEMPORARY] TABLE [IF EXISTS] table_name [, table_name] ...
[RESTRICT | CASCADE]
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A DROP TABLE
instrução remove uma tabela e seus dados permanentemente do banco de dados. No MySQL, você também pode remover várias tabelas usando uma única DROP TABLE
instrução, cada tabela é separada por uma vírgula (,).
A TEMPORARY
opção permite remover apenas tabelas temporárias . Ele garante que você não remova acidentalmente tabelas não temporárias.
A IF EXISTS
opção descarta condicionalmente uma tabela somente se ela existir. Se você eliminar uma tabela inexistente com a IF EXISTS
opção, o MySQL gerará uma NOTA, que pode ser recuperada usando a SHOW WARNINGS
instrução.
Observe que a DROP TABLE
instrução apenas elimina tabelas. Ele não remove privilégios de usuário específicos associados às tabelas. Portanto, se você criar uma tabela com o mesmo nome da tabela eliminada, o MySQL aplicará os privilégios existentes à nova tabela, o que pode representar um risco de segurança.
As opções RESTRICT
e CASCADE
são reservadas para versões futuras do MySQL.
Para executar a DROP TABLE
instrução, você deve ter DROP
privilégios na tabela que deseja remover.
DROP TABLE
Exemplos de MySQL
Vejamos alguns exemplos de uso da DROP TABLE
declaração.
1) Usando o MySQL DROP TABLE para eliminar um exemplo de tabela única
Primeiro, crie uma tabela nomeada insurances
para fins de teste:
CREATE TABLE insurances (
id INT AUTO_INCREMENT,
title VARCHAR(100) NOT NULL,
effectiveDate DATE NOT NULL,
duration INT NOT NULL,
amount DEC(10 , 2 ) NOT NULL,
PRIMARY KEY(id)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, use o DROP TABLE
para excluir a insurances
tabela:
DROP TABLE insurances;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
2) Usando MySQL DROP TABLE para eliminar múltiplas tabelas
Primeiro, crie duas tabelas chamadas CarAccessories
e CarGadgets
:
CREATE TABLE CarAccessories (
id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DEC(10 , 2 ) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE CarGadgets (
id INT AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
price DEC(10 , 2 ) NOT NULL,
PRIMARY KEY(id)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Segundo, use a DROP TABLE
instrução para eliminar as duas tabelas:
DROP TABLE CarAccessories, CarGadgets;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
3) Usando MySQL DROP TABLE para eliminar uma tabela inexistente
Esta instrução tenta eliminar uma tabela inexistente:
DROP TABLE aliens;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL emitiu o seguinte erro:
Error Code: 1051. Unknown table 'classicmodels.aliens'
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
No entanto, se você usar a IF EXISTS
opção na DROP TABLE
declaração:
DROP TABLE IF EXISTS aliens;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Em vez disso, o MySQL emitiu um aviso:
0 row(s) affected, 1 warning(s): 1051 Unknown table 'classicmodels.aliens'
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Para mostrar o aviso, você pode usar a SHOW WARNINGS
instrução:
SHOW WARNINGS;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
MySQL DROP TABLE baseado em um padrão
Suponha que você tenha muitas tabelas cujos nomes começam com test
em seu banco de dados e queira remover todas elas usando uma única DROP TABLE
instrução.
Infelizmente, o MySQL não possui a DROP TABLE LIKE
instrução que pode remover tabelas com base na correspondência de padrões:
DROP TABLE LIKE '%pattern%'
Linguagem de código: JavaScript ( javascript )
No entanto, existem algumas soluções alternativas. Discutiremos um deles aqui para sua referência.
Primeiro, crie três tabelas test1
, test2
, test4
para demonstração:
CREATE TABLE test1(
id INT AUTO_INCREMENT,
PRIMARY KEY(id)
);
CREATE TABLE IF NOT EXISTS test2 LIKE test1;
CREATE TABLE IF NOT EXISTS test3 LIKE test1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Suponha que você queira remover todas test*
as tabelas.
Segundo, declare duas variáveis que aceitam o esquema do banco de dados e um padrão que você deseja que as tabelas correspondam:
-- set table schema and pattern matching for tables
SET @schema = 'classicmodels';
SET @pattern = 'test%';
Linguagem de código: CSS ( css )
Terceiro, construa uma DROP TABLE
declaração dinâmica:
-- construct dynamic sql (DROP TABLE tbl1, tbl2...;)
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(CONCAT(@schema,'.',table_name)),';')
INTO @droplike
FROM information_schema.tables
WHERE @schema = database()
AND table_name LIKE @pattern;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A consulta instrui o MySQL a ir para a tabela information_schema, que contém informações sobre todas as tabelas em todos os bancos de dados, e concatena todas as tabelas no banco de dados @schema
( classicmodels
) que correspondem ao padrão @pattern
( test%
) com o prefixo DROP TABLE
. A GROUP_CONCAT
função cria uma lista de tabelas separadas por vírgulas.
Quarto, exiba o SQL dinâmico para verificar se funciona corretamente:
-- display the dynamic sql statement
SELECT @droplike;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Como você pode ver, o resultado é o que esperávamos.
Quinto, execute a instrução usando uma instrução preparada conforme mostrado na consulta a seguir:
-- execute dynamic sql
PREPARE stmt FROM @droplike;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Juntando tudo.
-- set table schema and pattern matching for tables
SET @schema = 'classicmodels';
SET @pattern = 'test%';
-- build dynamic sql (DROP TABLE tbl1, tbl2...;)
SELECT CONCAT('DROP TABLE ',GROUP_CONCAT(CONCAT(@schema,'.',table_name)),';')
INTO @droplike
FROM information_schema.tables
WHERE @schema = database()
AND table_name LIKE @pattern;
-- display the dynamic sql statement
SELECT @droplike;
-- execute dynamic sql
PREPARE stmt FROM @droplike;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Portanto, se você deseja eliminar várias tabelas que possuem um padrão específico em um banco de dados, basta usar o script acima para economizar tempo.
Tudo que você precisa fazer é substituir o padrão e o esquema do banco de dados@pattern
em variáveis @schema
.
Se você tiver que lidar com essa tarefa com frequência, poderá desenvolver um procedimento armazenado baseado no script e reutilizá-lo.
Neste tutorial, você aprendeu como usar a DROP TABLE
instrução MySQL para remover tabelas existentes de um banco de dados.