Database
 sql >> Base de données >  >> RDS >> Database

SQL DROP TABLE pour les débutants

En SQL, si vous souhaitez supprimer une table d'une base de données, vous devez utiliser le DROP TABLE déclaration.

Cela détruit la table et toutes ses données.

Syntaxe

La syntaxe standard SQL ressemble à ceci :

DROP TABLE <table name> <drop behavior>

Où :

  • <table name> est le nom de la table que vous souhaitez supprimer.
  • <drop behavior> spécifie toutes les options. Ceux-ci peuvent être soit CASCADE ou RESTRICT .

Certains SGBDR acceptent également un IF EXISTS facultatif argument qui signifie qu'il ne renverra pas d'erreur si la table n'existe pas.

Certains SGBDR (tels que MySQL et MariaDB) acceptent également un TEMPORARY facultatif mot-clé pour s'assurer que seules les tables temporaires sont supprimées.

Oracle accepte également une PURGE clause, qui le purge de la corbeille.

Exemple

Voici un exemple pour illustrer.

DROP TABLE t1;

L'exécution de ce code supprime la table appelée t1 et toutes ses données.

Le IF EXISTS Article

Voici un exemple d'utilisation de IF EXISTS clause pour vérifier si la table existe déjà.

DROP TABLE IF EXISTS t1;

Utilisation de IF EXISTS garantit que nous n'obtenons pas d'erreur si la table n'existe pas.

Voici ce qui se passe si nous supprimons IF EXISTS de la déclaration :

DROP TABLE t1;

Résultat :

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

C'est le message renvoyé par SQL Server. Votre message dépendra du SGBD que vous utilisez.

Clés et vues étrangères dépendantes

Certains SGBDR autorisent un RESTRICT facultatif ou CASCADE mot-clé qui spécifie ce qui se passe si la table a des clés étrangères ou des vues qui y font référence.

Le RESTRICT Options

Voici un exemple d'utilisation de RESTRICT lors d'une tentative de suppression d'une table référencée par une clé étrangère dans une autre table :

DROP TABLE t1 RESTRICT;

Résultat :

cannot drop table t1 because other objects depend on it

Cet exemple a été réalisé avec PostgreSQL. RESTRICT est l'option par défaut, donc nous aurions reçu le même résultat même si nous n'avions pas inclus le RESTRICT mot-clé.

La CASCADE Options

Voici ce qui se passe si nous passons à CASCADE lors d'une tentative de suppression de la même table (qui est référencée par une clé étrangère dans une autre table) :

DROP TABLE t1 CASCADE;

Résultat :

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

Cela a supprimé la clé étrangère qui faisait référence à notre t1 table. La clé étrangère s'appelait t2_c2_fkey .

Notez qu'il n'a pas supprimé la table contenant la clé étrangère. Il n'a supprimé que la clé étrangère.

Si la table cible (t1 ) était référencé par n'importe quelle vue, la vue entière aurait été supprimée.

Vous n'avez pas besoin de spécifier CASCADE pour supprimer tous les index, règles, déclencheurs ou contraintes qui existent pour la table cible. Ceux-ci sont supprimés automatiquement, même en utilisant l'option par défaut (RESTRICT ).

MySQL et MariaDB

Certains SGBD (tels que MySQL et MariaDB) acceptent le RESTRICT et CASCADE mots-clés, mais ils ne font rien. Ils sont fournis simplement pour faciliter la portabilité entre les SGBD.

Oracle

Oracle a une syntaxe légèrement différente, CASCADE CONSTRAINTS , qui supprime toutes les contraintes d'intégrité référentielle faisant référence aux clés primaires et uniques dans la table supprimée.

SQL Server

SQL Server ne prend pas en charge la CASCADE ou RESTRICT mots clés. Si la table a des dépendances de clé étrangère, vous devrez les supprimer avant de supprimer la table, sinon vous obtiendrez une erreur.

Cependant, dans SQL Server, vous pouvez supprimer une table même si elle est référencée par une vue ou une procédure stockée. Par conséquent, vous devez rechercher de telles références et les supprimer explicitement en utilisant DROP VIEW ou DROP PROCEDURE .

SQLite

SQLite ne supporte pas le CASCADE ou RESTRICT mots clés.

Si la table cible est référencée par des vues, la table sera toujours supprimée (et la vue restera).

Si la table cible est référencée par des clés étrangères, le résultat dépendra si vous avez des clés étrangères activées, et si oui, s'il y a des données dans la table enfant, et si oui, si oui ou non la clé étrangère est définie avec ON DELETE CASCADE .

Si vous utilisez SQLite, voir SQLite DROP TABLE pour un exemple et une discussion sur la suppression d'une table référencée par une clé étrangère.

Supprimer plusieurs tableaux

Certains SGBDR vous permettent de supprimer plusieurs tables d'un seul DROP TABLE déclaration.

Exemple :

DROP TABLE t11, t12;

Les SGBDR qui prennent en charge cette syntaxe incluent SQL Server, MySQL, MariaDB et PostgreSQL.

Cependant, si vous supprimez une table référencée par une clé étrangère et que cette clé étrangère l'empêche d'être supprimée, vous devrez répertorier la table enfant avant la table parent.

Par exemple, si j'exécute l'instruction ci-dessus dans SQL Server, j'obtiens l'erreur suivante :

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

Dans ce cas, je peux simplement changer l'ordre des tables dans mon DROP TABLE déclaration :

DROP TABLE t12, t11;

En fait, dans ce cas, j'ai eu une autre erreur me disant que t12 n'existe pas.

Voici ce que j'ai :

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

En effet, même si l'instruction précédente ne pouvait pas supprimer t11 , il a en fait réussi à supprimer t12 .

Et tout comme une comédie d'erreurs, cette fois, il a réussi à laisser tomber t11 mais pas t12 .

Quoi qu'il en soit, les deux tables ont maintenant été supprimées.

Mais si vous obtenez la commande correcte la première fois, vous devriez recevoir un message comme celui-ci :

Commands completed successfully.

Le mot-clé TEMPORAIRE

Certains SGBDR (tels que MySQL et MariaDB) acceptent un TEMPORARY mot-clé.

Il va entre DROP et TABLE , comme ceci :

DROP TEMPORARY TABLE t1;

Utilisation du TEMPORARY mot-clé garantira que vous ne supprimez pas accidentellement une table non temporaire lorsque vous tentez de supprimer une table temporaire.

Le TEMPORARY mot-clé a les effets suivants :

  • L'instruction supprime uniquement TEMPORARY tableaux.
  • L'instruction ne provoque pas de commit implicite (en utilisant DROP TABLE sans le TEMPORARY mot-clé valide automatiquement la transaction active en cours).
  • Aucun droit d'accès n'est vérifié. Un TEMPORARY la table n'est visible qu'avec la session qui l'a créée, aucune vérification n'est donc nécessaire.

La clause de purge

Oracle a un PURGE facultatif clause, que vous pouvez utiliser si vous souhaitez supprimer la table et libérer l'espace qui lui est associé en une seule étape. Si vous spécifiez PURGE , la base de données ne place pas la table et ses objets dépendants dans la corbeille.

Cela équivaut à supprimer d'abord la table, puis à la purger de la corbeille, mais cela vous permet d'économiser une étape du processus.

Notez que si vous spécifiez PURGE , vous ne pourrez pas récupérer la table.

Si vous ne spécifiez pas PURGE , le DROP TABLE n'entraîne pas la libération d'espace vers le tablespace pour être utilisé par d'autres objets, et l'espace continue d'être comptabilisé dans le quota d'espace de l'utilisateur.