Database
 sql >> Base de Dados >  >> RDS >> Database

SQL DROP TABLE para iniciantes


Em SQL, se você deseja remover uma tabela de um banco de dados, você precisa usar o DROP TABLE demonstração.

Isso destrói a tabela e todos os seus dados.

Sintaxe


A sintaxe padrão do SQL é assim:
DROP TABLE <table name> <drop behavior>

Onde:
  • <table name> é o nome da tabela que você deseja eliminar.
  • <drop behavior> especifica quaisquer opções. Estes podem ser CASCADE ou RESTRICT .

Alguns RDBMSs também aceitam um opcional IF EXISTS argumento que significa que não retornará um erro se a tabela não existir.

Alguns RDBMSs (como MySQL e MariaDB) também aceitam um opcional TEMPORARY palavra-chave para garantir que apenas as tabelas temporárias sejam eliminadas.

A Oracle também aceita um PURGE cláusula, que o limpa da lixeira.

Exemplo


Aqui está um exemplo para demonstrar.
DROP TABLE t1;

A execução desse código elimina a tabela chamada t1 e todos os seus dados.

O IF EXISTS Cláusula


Aqui está um exemplo de uso do IF EXISTS cláusula para verificar se a tabela já existe.
DROP TABLE IF EXISTS t1;

Usando IF EXISTS garante que não receberemos um erro se a tabela não existir.

Veja o que acontece se removermos IF EXISTS da declaração:
DROP TABLE t1;

Resultado:
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.

Essa é a mensagem retornada pelo SQL Server. Sua mensagem dependerá do DBMS que você está usando.

Chaves e visualizações estrangeiras dependentes


Alguns RDBMSs permitem um opcional RESTRICT ou CASCADE palavra-chave que especifica o que acontece se a tabela tiver quaisquer chaves estrangeiras ou visualizações que façam referência a ela.

O RESTRICT Opção


Aqui está um exemplo de uso de RESTRICT ao tentar descartar uma tabela referenciada por uma chave estrangeira em outra tabela:
DROP TABLE t1 RESTRICT;

Resultado:
cannot drop table t1 because other objects depend on it

Este exemplo foi feito usando PostgreSQL. RESTRICT é a opção padrão, então teríamos recebido o mesmo resultado mesmo se não tivéssemos incluído o RESTRICT palavra-chave.

A CASCADE Opção


Veja o que acontece se mudarmos para CASCADE ao tentar descartar a mesma tabela (que é referenciada por uma chave estrangeira em outra tabela):
DROP TABLE t1 CASCADE;

Resultado:
NOTICE:  drop cascades to constraint t2_c2_fkey on table t2
Commands completed successfully

Isso descartou a chave estrangeira que fazia referência ao nosso t1 tabela. A chave estrangeira foi chamada t2_c2_fkey .

Observe que não descartou a tabela que tinha a chave estrangeira. Ele apenas descartou a chave estrangeira.

Se a tabela de destino (t1 ) fosse referenciado por quaisquer visualizações, a visualização inteira teria sido descartada.

Você não precisa especificar CASCADE para eliminar quaisquer índices, regras, gatilhos ou restrições que existam para a tabela de destino. Eles são descartados automaticamente, mesmo ao usar a opção padrão (RESTRICT ).

MySQL e MariaDB


Alguns DBMSs (como MySQL e MariaDB) aceitam o RESTRICT e CASCADE palavras-chave, mas eles não fazem nada. Eles são fornecidos simplesmente para facilitar a portabilidade entre DBMSs.

Oráculo


Oracle tem uma sintaxe ligeiramente diferente, CASCADE CONSTRAINTS , que descarta todas as restrições de integridade referencial que se referem a chaves primárias e exclusivas na tabela descartada.

SQL Server


SQL Server não suporta o CASCADE ou RESTRICT palavras-chave. Se a tabela tiver alguma dependência de chave estrangeira, você precisará eliminá-la antes de descartar a tabela, caso contrário, você receberá um erro.

No entanto, no SQL Server, você pode descartar uma tabela mesmo que ela seja referenciada por uma exibição ou procedimento armazenado. Portanto, você deve verificar essas referências e excluí-las explicitamente usando DROP VIEW ou DROP PROCEDURE .

SQLite


SQLite não suporta o CASCADE ou RESTRICT palavras-chave.

Se a tabela de destino for referenciada por qualquer exibição, a tabela ainda será descartada (e a exibição permanecerá).

Se a tabela de destino for referenciada por qualquer chave estrangeira, o resultado dependerá se você tem chaves estrangeiras habilitadas e, em caso afirmativo, se há algum dado na tabela filha e, em caso afirmativo, se a chave estrangeira está ou não definida com ON DELETE CASCADE .

Se você usa SQLite, veja SQLite DROP TABLE para um exemplo e discussão sobre como descartar uma tabela referenciada por uma chave estrangeira.

Retirar várias tabelas


Alguns RDBMSs permitem que você remova várias tabelas de um único DROP TABLE demonstração.

Exemplo:
DROP TABLE t11, t12;

Os RDBMSs que suportam essa sintaxe incluem SQL Server, MySQL, MariaDB e PostgreSQL.

No entanto, se você estiver descartando uma tabela referenciada por uma chave estrangeira e essa chave estrangeira impedir que ela seja descartada, será necessário listar a tabela filha antes da tabela pai.

Por exemplo, se eu executar a instrução acima no SQL Server, recebo o seguinte erro:
Msg 3726, Level 16, State 1, Line 1
Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.

Nesse caso, posso simplesmente mudar a ordem das tabelas no meu DROP TABLE demonstração:
DROP TABLE t12, t11;

Na verdade, neste caso, recebi outro erro dizendo que t12 não existe.

Aqui está o que eu tenho:
Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't12', because it does not exist or you do not have permission.

Isso ocorre porque, mesmo que a instrução anterior não pudesse eliminar t11 , foi de fato bem-sucedido em descartar t12 .

E, como uma comédia de erros, desta vez conseguiu eliminar t11 mas não t12 .

Independentemente disso, ambas as tabelas foram agora descartadas.

Mas se você acertar o pedido na primeira vez, você deve receber uma mensagem como esta:
Commands completed successfully.

A palavra-chave TEMPORÁRIA


Alguns RDBMSs (como MySQL e MariaDB) aceitam um TEMPORARY palavra-chave.

Ele vai entre DROP e TABLE , assim:
DROP TEMPORARY TABLE t1;

Usando o TEMPORARY A palavra-chave garantirá que você não descarte acidentalmente uma tabela não temporária ao tentar descartar uma tabela temporária.

O TEMPORARY palavra-chave tem os seguintes efeitos:
  • A instrução descarta apenas TEMPORARY tabelas.
  • A instrução não causa um commit implícito (usando DROP TABLE sem o TEMPORARY palavra-chave confirma automaticamente a transação ativa atual).
  • Nenhum direito de acesso é verificado. Um TEMPORARY A tabela é visível apenas com a sessão que a criou, portanto, nenhuma verificação é necessária.

A Cláusula de Purga


Oracle tem um opcional PURGE cláusula, que você pode usar se quiser descartar a tabela e liberar o espaço associado a ela em uma única etapa. Se você especificar PURGE , o banco de dados não colocará a tabela e seus objetos dependentes na lixeira.

Isso equivale a primeiro descartar a tabela e depois removê-la da lixeira, mas permite que você salve uma etapa do processo.

Observe que se você especificar PURGE , você não poderá recuperar a tabela.

Se você não especificar PURGE , o DROP TABLE não resulta na liberação de espaço de volta para o tablespace para uso por outros objetos, e o espaço continua a contar para a cota de espaço do usuário.