235 votes

Comment faire pour supprimer toutes les tables de MySQL depuis la ligne de commande ?

Comment tomber toutes les tables dans Windows de mysql, via une invite de commande ? La raison pour laquelle que je veux faire c’est que notre utilisateur a accès aux base de données des gouttes, mais pas d’accès à recréer la base de données elle-même, donc nous devons supprimer les tables manuellement. est-il possible de laisser tomber le tout à la fois ? Gardez à l’esprit que la plupart des tables est liée avec les clés étrangères donc ils auraient dû être abandonné dans l’ordre spécifique.

329voto

Devart Points 52715

Vous pouvez générer l’instruction comme ceci : `` puis utiliser des instructions préparées pour l’exécuter :

293voto

Kostanos Points 1126

@Devart version est correcte, mais le lièvre sont quelques améliorations pour éviter d'avoir d'erreur. J'ai édité le @Devart réponse, mais il n'a pas été acceptée.

SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
  FROM information_schema.tables
  WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@tables,'dummy') INTO @tables;

SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;

Ce script ne soulèvera pas d'erreur avec un résultat NUL dans le cas où vous avez déjà supprimé toutes les tables dans la base de données par l'ajout d'au moins un inexistant - "factice" de la table.

Et il fixe, dans le cas où vous avez un grand nombre de tables.

Et Ce petit changement, de supprimer tous les afficher dans la Base de données

SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @views = NULL;
SELECT GROUP_CONCAT('`', TABLE_NAME, '`') INTO @views
  FROM information_schema.views
  WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@views,'dummy') INTO @views;

SET @views = CONCAT('DROP VIEW IF EXISTS ', @views);
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;

Il suppose que vous exécutez le script à partir de la Base de données que vous souhaitez supprimer. Ou exécuter ce avant:

USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;
  • Merci à Steve Horvath pour découvrir le problème avec les backticks.

91voto

MutantMahesh Points 230

Essayez ceci. Cela fonctionne même pour les tables avec contraintes (relations de clé étrangère). Alternativement, vous pouvez simplement déposer la base de données et recréer, mais vous ne pouvez pas avoir la permission de le faire.

50voto

user1086159 Points 271

Vous pouvez laisser tomber le `` puis le recréer avec le ci-dessous :-

17voto

Salil Points 20300

Ref ce

OU si vous voulez que vous pouvez demander à supprimer la base de données aussi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X