DROP TABLE¶
Supprime une table du schéma actuel ou spécifié, mais conserve une version de la table afin qu’elle puisse être récupérée en utilisant UNDROP TABLE. Pour plus d’informations, consultez Notes sur l’utilisation.
- Voir aussi :
CREATE TABLE , ALTER TABLE , SHOW TABLES , TRUNCATE TABLE , DESCRIBE TABLE
Syntaxe¶
DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
Paramètres¶
name
Indique l’identificateur de la table à détruire. Si l’identificateur contient des espaces, des caractères spéciaux ou des caractères de différentes casses, toute la chaîne doit être entre guillemets doubles. Les identificateurs entre guillemets doubles sont également sensibles à la casse (par exemple,
"My Object"
).Si l’identificateur de la table n’est pas complet (sous la forme
db_name.schema_name.table_name
ouschema_name.table_name
), la commande recherche la table dans le schéma actuel de la session.CASCADE | RESTRICT
Indique si la table peut être détruite s’il existe des clés étrangères qui font référence à la table :
CASCADE : supprime la table même si celle-ci présente des clés primaires ou uniques référencées par des clés étrangères dans d’autres tables.
RESTRICT : renvoie un avertissement sur les références de clés étrangères existantes et ne supprime pas la table.
Par défaut : CASCADE pour les tables standard ; RESTRICT pour les tables hybrides. Voir aussi Suppression de tables hybrides.
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :
Privilège |
Objet |
Remarques |
---|---|---|
OWNERSHIP |
Table |
OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege). |
Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.
Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.
Notes sur l’utilisation¶
La destruction d’une table ne la supprime pas définitivement du système. Une version de la table détruite est conservée dans Time Travel pendant le nombre de jours spécifié par la période de conservation des données de la table :
Pendant la période de conservation de Time Travel, vous pouvez restaurer une table supprimée à l’aide de la commande UNDROP TABLE.
La modification de la période de conservation Time Travel pour le compte ou pour un objet parent (c’est-à-dire une base de données ou un schéma) après la suppression d’une table ne modifie pas la période de conservation Time Travel pour la table supprimée. Pour plus d’informations, consultez la remarque dans la rubrique sur Time Travel.
Lorsque la période de conservation de Time Travel prend fin, l’état suivant de la table détruite dépend de son caractère : permanente, temporaire ou transitoire :
Une table permanente se déplace dans Fail-safe. Dans Fail-safe (7 jours), une table détruite peut être récupérée, mais seulement par Snowflake. Lorsque la table quitte Fail-safe, elle est purgée.
Une table transitoire ou temporaire n’est associée à aucune période Fail-safe, elle est donc purgée lorsqu’elle dépasse la période Time Travel.
Note
Une requête Time Travel de longue durée retarde le déplacement des données et des objets (tables, schémas et bases de données) du compte vers Fail-safe, jusqu’à ce que la requête soit terminée. La purge des tables temporaires et transitoires est retardée de la même manière.
Une fois qu’une table supprimée est purgée, elle ne peut pas être récupérée ; elle doit être recréée.
Après la suppression d’une table, la création d’une table portant le même nom crée une nouvelle version de la table. Vous pouvez toujours restaurer la version supprimée de la table précédente en suivant les étapes suivantes :
Renommez la version actuelle de la table.
Utilisez la commande UNDROP TABLE pour restaurer la version précédente de la table.
Avant de supprimer une table, vérifiez qu’aucune vue ne la référence. La suppression d’une table référencée par une vue rend cette vue non valide (c’est-à-dire qu’interroger la vue renvoie une erreur de type « cet objet n’existe pas »).
Pour supprimer une table, vous devez utiliser un rôle disposant du privilège OWNERSHIP sur la table.
Lorsque la clause IF EXISTS est spécifiée et que l’objet cible n’existe pas, la commande se termine correctement, sans renvoyer d’erreur.
Suppression de tables hybrides¶
Lorsque vous supprimez une table hybride sans spécifier l’option RESTRICT ou CASCADE et que la table hybride possède une relation clé primaire/clé étrangère ou clé unique/clé étrangère avec une autre table, la commande DROP TABLE échoue et affiche une erreur. Le comportement par défaut est RESTRICT.
Par exemple :
CREATE OR REPLACE HYBRID TABLE ht1(
col1 NUMBER(38,0) NOT NULL,
col2 NUMBER(38,0) NOT NULL,
CONSTRAINT pkey_ht1 PRIMARY KEY (col1, col2));
CREATE OR REPLACE HYBRID TABLE ht2(
cola NUMBER(38,0) NOT NULL,
colb NUMBER(38,0) NOT NULL,
colc NUMBER(38,0) NOT NULL,
CONSTRAINT pkey_ht2 PRIMARY KEY (cola),
CONSTRAINT fkey_ht1 FOREIGN KEY (colb, colc) REFERENCES ht1(col1,col2));
DROP TABLE ht1;
SQL compilation error:
Cannot drop the table because of dependencies
La commande DROP TABLE échoue dans ce cas. Si nécessaire, vous pouvez ignorer le comportement par défaut en spécifiant CASCADE dans la commande DROP TABLE.
DROP TABLE ht1 CASCADE;
Dans ce cas, vous pouvez également supprimer la table dépendante ht2
en premier lieu, puis la table ht1
.
Exemples¶
Détruire une table :
SHOW TABLES LIKE 't2%'; +---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | |---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ | Tue, 17 Mar 2015 16:48:16 -0700 | T2 | TESTDB | PUBLIC | TABLE | | | 5 | 4096 | PUBLIC | 1 | +---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+ DROP TABLE t2; +--------------------------+ | status | |--------------------------| | T2 successfully dropped. | +--------------------------+ SHOW TABLES LIKE 't2%'; +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+ | created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | |------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------| +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
Détruire à nouveau la table, mais ne pas engendrer d’erreur si la table n’existe pas :
DROP TABLE IF EXISTS t2; +------------------------------------------------------------+ | status | |------------------------------------------------------------| | Drop statement executed successfully (T2 already dropped). | +------------------------------------------------------------+