Syntaxe
DROP TABLE tbl_name ...
Description
DROP TABLE
supprime une ou plusieurs tables. Vous devez avoir le privilègeDROP
pour chaque table. Toutes les données de table et la définition de table sont supprimées, ainsi que les déclencheurs associés à la table, donc attention à cette instruction! Si L’une des tables nommées dans la liste d’arguments n’existe pas, MariaDB renvoie une erreur indiquant par nom quelles tables non existantes n’ont pas pu être supprimées, mais elle supprime également toutes les tables de la liste qui existent.,
Important: lorsqu’une table est supprimée, les privilèges utilisateur sur la table ne sont pas automatiquement supprimés. Voir de SUBVENTION.
Si un autre thread utilise la table dans une transaction explicite ou une transaction autocommit, alors le thread acquiert un verrou de métadonnées (MDL) sur la table. L’instructionDROP TABLE
attendra dans l’état de thread « Waiting for table metadata lock » jusqu’à ce que la MDL soit libérée. Les MDL sont libérées dans les cas suivants:
- Si une MDL est acquise dans une transaction explicite, la MDL sera libérée à la fin de la transaction.,
- Si une MDL est acquise dans une transaction autocommit, la MDL sera libérée à la fin de l’instruction.
- Les tables transactionnelles et non transactionnelles sont gérées de la même manière.
notez que pour une table partitionnée,DROP TABLE
supprime définitivement la définition de table, toutes ses partitions et toutes les données stockées dans ces partitions. Il supprime également la définition de partitionnement (.par) fileassocié à la table abandonnée.
pour chaque table référencée,DROP TABLE
supprime une table temporaire portant ce nom, si elle existe., S’il n’existe pas et que le mot-clé TEMPORARY
n’est pas utilisé, il supprime une table non temporaire portant le même nom, si elle existe. Le mot cléTEMPORARY
garantit qu’une table non temporaire ne sera pas accidentellement supprimée.
utilisezIF EXISTS
pour éviter qu’une erreur ne se produise pour les tables qui n’existent pas. NOTE
est généré pour chaque table inexistante lors de l’utilisation deIF EXISTS
. Voir afficher les Avertissements.
Si une clé étrangère fait référence à cette table, la table ne peut pas être supprimée., Dans ce cas, il est nécessaire de laisser tomber la clé étrangère en premier.
RESTRICT
et CASCADE
sont autorisés à faire de portage à partir d’autres systèmes de base de données plus facile. À MariaDB, ils ne font rien.
le commentaire avant les noms de table (/*COMMENT TO SAVE*/
) est stocké dans le journal binaire. Cette fonctionnalité peut être utilisée par les outils de réplication pour envoyer leurs messages internes.
Il est possible de spécifier des noms de table commedb_name
.tab_name
. Ceci est utile pour supprimer des tables de plusieurs bases de données avec une seule instruction., Voir qualificatifs D’identificateur pour plus de détails.
le privilège DROP est requis pour utiliser DROP TABLE
sur des tables non temporaires. Pour les tables temporaires, aucun privilège n’est requis, car ces tables ne sont visibles que pour la session en cours.
Remarque:DROP TABLE
valide automatiquement la transaction active en cours,sauf si vous utilisez le mot-cléTEMPORARY
.
MariaDB commençant par 10.5.4
à partir de MariaDB 10.5.,4, DROP TABLE
supprime de manière fiable les restes de table dans un moteur de stockage même si le fichier .frm
est manquant. Avant cela, un fichier .frm
manquant entraînerait l’échec de l’instruction.
MariaDB à partir de 10.3.1
WAIT/NOWAIT
définissez le délai d’attente de verrouillage. Voir attendre et NOWAIT.
DROP TABLE dans la réplication
DROP TABLE
possède les caractéristiques suivantes dans la réplication:
-
DROP TABLE if EXISTS
sont toujours connectés., -
DROP TABLE
sanssi existe
pour les tables qui n’existent pas ne sont pas écrites dans le journal binaire. - suppression de
temporaire
les tables sont préfixées dans le journal avectemporaire
. Ces suppressions ne sont enregistrées que lors de l’exécution d’une instruction ou d’une réplication en mode mixte., - Un
DROP TABLE
déclaration peut être connecté avec jusqu’à 3 différentsGOUTTE
déclarations:DROP TABLE TEMPORAIRE list_of_non_transactional_temporary_tables
DROP TABLE TEMPORAIRE list_of_transactional_temporary_tables
DROP TABLE list_of_normal_tables
À partir de MariaDB 10.0.,8, table de dépôt
sur le maître est traité sur l’esclave comme table de dépôt si existe
. Vous pouvez changer cela en définissant slave-DDL-exec-mode sur STRICT
.
suppression D’un #sql-interne… Table
Si le processus mysqld est tué pendant une table ALTER, vous pouvez trouver une table nommée #sql-… dans votre répertoire de données. Dans MariaDB 10.3, les tables InnoDB avec ce préfixe seront automatiquement supprimées pendant startup.In MariaDB 10.4 nous veillerons à ce que ces tables temporaires soient toujours supprimées automatiquement.,
Si vous souhaitez supprimer l’une de ces tables explicitement, vous pouvez le faire en utilisant la syntaxe suivante:
DROP TABLE `#mysql50##sql-...`;
Lors de l’exécution d’un ALTER TABLE…ALGORITHM=INPLACE
qui recrée la table, InnoDB va créer un #sql-ib
tableau. Pour ces tables, le fichier.frm
sera appelé autre chose. Pour supprimer une telle table après un plantage du serveur, vous devez renommer le fichier#sql*.frm
pour qu’il corresponde au fichier#sql-ib*.ibd
.,
supprimer toutes les Tables d’une base de données
la meilleure façon de supprimer toutes les tables d’une base de données est d’exécuterDROP DATABASE
, qui supprimera la base de données elle-même et toutes les tables qu’elle contient.
cependant, si vous souhaitez supprimer toutes les tables de la base de données, mais que vous souhaitez également conserver la base de données elle-même et tout autre objet non-table, vous devez exécuterDROP TABLE
pour supprimer chaque table individuelle. Vous pouvez construire ces commandesDROP TABLE
en interrogeant la tableTABLES
dans la base de donnéesinformation_schema
., Par exemple:
SELECT CONCAT('DROP TABLE IF EXISTS `', TABLE_SCHEMA, '`.`', TABLE_NAME, '`;')FROM information_schema.TABLESWHERE TABLE_SCHEMA = 'mydb';
Exemples
DROP TABLE Employees, Customers;
Notes
Attention, DROP TABLE
à la chute de tables et séquences. Ceci est principalement fait pour permettre aux anciens outils comme mysqldump de travailler avec des séquences.
Voir Aussi
- CREATE TABLE
- ALTER TABLE
- SHOW CREATE TABLE
- SÉQUENCE de largage
- Variable esclave-ddl-exec-mode.