Database
 sql >> Database >  >> RDS >> Database

DROP TABLE SQL per principianti

In SQL, se vuoi rimuovere una tabella da un database, devi usare il DROP TABLE dichiarazione.

Ciò distrugge la tabella e tutti i suoi dati.

Sintassi

La sintassi standard SQL è la seguente:

DROP TABLE <table name> <drop behavior>

Dove:

  • <table name> è il nome della tabella che vuoi eliminare.
  • <drop behavior> specifica qualsiasi opzione. Questi possono essere CASCADE o RESTRICT .

Alcuni RDBMS accettano anche un IF EXISTS opzionale argomento che significa che non restituirà un errore se la tabella non esiste.

Alcuni RDBMS (come MySQL e MariaDB) accettano anche un TEMPORARY opzionale parola chiave per garantire che vengano eliminate solo le tabelle temporanee.

Oracle accetta anche un PURGE clausola, che lo elimina dal cestino.

Esempio

Ecco un esempio da dimostrare.

DROP TABLE t1;

L'esecuzione di quel codice rilascia la tabella chiamata t1 e tutti i suoi dati.

Il IF EXISTS Clausola

Ecco un esempio di utilizzo di IF EXISTS clausola per verificare se la tabella esiste già.

DROP TABLE IF EXISTS t1;

Usando IF EXISTS assicura che non riceviamo un errore se la tabella non esiste.

Ecco cosa succede se rimuoviamo IF EXISTS dalla dichiarazione:

DROP TABLE t1;

Risultato:

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

Questo è il messaggio restituito da SQL Server. Il tuo messaggio dipenderà dal DBMS che stai utilizzando.

Chiavi esterne e viste dipendenti

Alcuni RDBMS consentono un RESTRICT opzionale o CASCADE parola chiave che specifica cosa succede se la tabella ha chiavi esterne o viste che fanno riferimento ad essa.

Il RESTRICT Opzione

Ecco un esempio di utilizzo di RESTRICT quando si tenta di eliminare una tabella a cui fa riferimento una chiave esterna in un'altra tabella:

DROP TABLE t1 RESTRICT;

Risultato:

cannot drop table t1 because other objects depend on it

Questo esempio è stato eseguito utilizzando PostgreSQL. RESTRICT è l'opzione predefinita, quindi avremmo ricevuto lo stesso risultato anche se non avessimo incluso il RESTRICT parola chiave.

Il CASCADE Opzione

Ecco cosa succede se passiamo a CASCADE quando si tenta di eliminare la stessa tabella (a cui fa riferimento una chiave esterna in un'altra tabella):

DROP TABLE t1 CASCADE;

Risultato:

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

Questo ha eliminato la chiave esterna che faceva riferimento al nostro t1 tavolo. La chiave esterna è stata chiamata t2_c2_fkey .

Nota che non ha eliminato la tabella che aveva la chiave esterna. Ha eliminato solo la chiave esterna.

Se la tabella di destinazione (t1 ) è stato referenziato da qualsiasi vista, l'intera vista sarebbe stata eliminata.

Non è necessario specificare CASCADE per eliminare indici, regole, trigger o vincoli esistenti per la tabella di destinazione. Questi vengono eliminati automaticamente, anche quando si utilizza l'opzione predefinita (RESTRICT ).

MySQL e MariaDB

Alcuni DBMS (come MySQL e MariaDB) accettano RESTRICT e CASCADE parole chiave, ma non fanno nulla. Sono forniti semplicemente per una più facile portabilità tra DBMS.

Oracolo

Oracle ha una sintassi leggermente diversa, CASCADE CONSTRAINTS , che elimina tutti i vincoli di integrità referenziale che fanno riferimento alle chiavi primarie e univoche nella tabella eliminata.

SQL Server

SQL Server non supporta il CASCADE o RESTRICT parole chiave. Se la tabella ha dipendenze da chiavi esterne, dovrai eliminarle prima di eliminare la tabella, altrimenti riceverai un errore.

Tuttavia, in SQL Server è possibile eliminare una tabella anche se è referenziata da una vista o da una stored procedure. Pertanto, dovresti verificare la presenza di tali riferimenti e rilasciarli esplicitamente utilizzando DROP VIEW o DROP PROCEDURE .

SQLite

SQLite non supporta CASCADE o RESTRICT parole chiave.

Se la tabella di destinazione è referenziata da qualsiasi vista, la tabella verrà comunque eliminata (e la vista rimarrà).

Se la tabella di destinazione è referenziata da chiavi esterne, il risultato dipenderà dal fatto che le chiavi esterne siano abilitate e, in tal caso, dalla presenza di dati nella tabella figlio e, in tal caso, dal fatto che la chiave esterna sia definita o meno con ON DELETE CASCADE .

Se usi SQLite, consulta SQLite DROP TABLE per un esempio e una discussione sull'eliminazione di una tabella a cui fa riferimento una chiave esterna.

Elimina più tabelle

Alcuni RDBMS ti consentono di eliminare più tabelle da un singolo DROP TABLE dichiarazione.

Esempio:

DROP TABLE t11, t12;

Gli RDBMS che supportano questa sintassi includono SQL Server, MySQL, MariaDB e PostgreSQL.

Tuttavia, se stai eliminando una tabella a cui fa riferimento una chiave esterna e tale chiave esterna ne impedisce l'eliminazione, dovrai elencare la tabella figlio prima della tabella padre.

Ad esempio, se eseguo l'istruzione precedente in SQL Server, ottengo il seguente errore:

Msg 3726, Level 16, State 1, Line 1
Could not drop object 't11' because it is referenced by a FOREIGN KEY constraint.

In questo caso, posso semplicemente cambiare l'ordine delle tabelle nel mio DROP TABLE dichiarazione:

DROP TABLE t12, t11;

In realtà, in questo caso, ho ricevuto un altro errore che mi diceva che t12 non esiste.

Ecco cosa ho ottenuto:

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

Questo perché, anche se l'istruzione precedente non poteva eliminare t11 , è riuscito infatti a eliminare t12 .

E proprio come una commedia degli errori, questa volta è stato in grado di rilasciare t11 ma non t12 .

Indipendentemente da ciò, ora entrambe le tabelle sono state eliminate.

Ma se ricevi l'ordine corretto la prima volta, dovresti ricevere un messaggio come questo:

Commands completed successfully.

La parola chiave TEMPORANEA

Alcuni RDBMS (come MySQL e MariaDB) accettano un TEMPORARY parola chiave.

Va tra DROP e TABLE , in questo modo:

DROP TEMPORARY TABLE t1;

Usando il TEMPORARY parola chiave ti assicurerà di non eliminare accidentalmente una tabella non temporanea quando tenti di eliminare una tabella temporanea.

Il TEMPORARY la parola chiave ha i seguenti effetti:

  • L'istruzione elimina solo TEMPORARY tabelle.
  • L'istruzione non provoca un commit implicito (usando DROP TABLE senza il TEMPORARY parola chiave impegna automaticamente la transazione attiva corrente).
  • Nessun diritto di accesso è verificato. Un TEMPORARY table è visibile solo con la sessione che l'ha creata, quindi non è necessario alcun controllo.

La clausola di eliminazione

Oracle ha un PURGE opzionale clausola, che puoi utilizzare se vuoi eliminare la tabella e liberare lo spazio ad essa associato in un unico passaggio. Se specifichi PURGE , il database non inserisce la tabella e gli oggetti dipendenti nel cestino.

Ciò equivale a eliminare prima il tavolo e poi eliminarlo dal cestino, ma ti consente di salvare un passaggio nel processo.

Nota che se specifichi PURGE , non potrai recuperare il tavolo.

Se non specifichi PURGE , il DROP TABLE istruzione non comporta il rilascio di spazio nel tablespace per l'utilizzo da parte di altri oggetti e lo spazio continua a contare per la quota di spazio dell'utente.