Existe-t-il un moyen simple et facile de supprimer toutes les tables d'une base de données MySQL, en ignorant les contraintes de clé étrangère qui peuvent s'y trouver?
mysql
foreign-keys
innodb
sql-drop
bcmcfc
la source
la source
Drop
dans le menu déroulant, vous pouvez décocher laForeign key check
case.Réponses:
J'ai trouvé l'ensemble généré d'instructions drop utile et recommande ces modifications:
Remarque 1: cela n'exécute pas les instructions DROP, il vous en donne juste une liste. Vous devrez couper et coller la sortie dans votre moteur SQL pour les exécuter.
Remarque 2: si vous avez des VUES, vous devrez corriger chaque
DROP TABLE `VIEW_NAME`
instructionDROP VIEW `VIEW_NAME`
manuellement.Par conséquent, pour que les instructions drop fonctionnent si vous avez besoin:
Cela désactivera les vérifications d'intégrité référentielle - donc lorsque vous aurez terminé d'effectuer les suppressions dont vous avez besoin, vous voudrez réinitialiser la vérification des clés avec
NB: pour utiliser plus facilement la sortie de SELECT, l'option mysql -B peut vous aider.
la source
DROP DATABASE foo; CREATE DATABASE foo;
, c'est ce qui n'est pas tout à fait le même mais qui a fonctionné pour moi.Depuis http://www.devdaily.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys :
(Notez que cela explique comment désactiver les vérifications de clés étrangères afin de pouvoir supprimer les tables dans un ordre arbitraire. Il ne répond pas comment générer automatiquement des instructions drop-table pour toutes les tables existantes et les exécuter dans un seul script. Réponse de Jean Est-ce que.)
la source
Voici la procédure stockée de SurlyDre modifiée afin que les clés étrangères soient ignorées:
la source
_tableName
avec des citations. Sinon, il échouera sur certains tableaux commegroup
ou sur d'autres mots clés.chaque approche ci-dessus comprend beaucoup plus de travail que celle-ci AFAICT ...
la source
mysqldump
versmysql
, sans passer par un fichier?mysqldump
engrep
enmysql
, cela fonctionne. Merci encore pour votre solution, c'est bien.De cette réponse ,
exécuter:
Cela supprime les tables de la base de données actuellement utilisée. Vous pouvez définir la base de données actuelle à l'aide de
use
.Ou sinon, la réponse acceptée par Dion est plus simple, sauf que vous devez l'exécuter deux fois, d'abord pour obtenir la requête, et ensuite pour exécuter la requête. J'ai fourni quelques back-ticks idiots pour échapper aux caractères spéciaux dans les noms de db et de table.
la source
Voici une solution basée sur un curseur. Un peu long mais fonctionne comme un seul lot SQL:
la source
Tu peux faire:
Exécutez ensuite les requêtes générées. Ils supprimeront chaque table de la base de données actuelle.
Voici de l' aide sur
drop table
commande.la source
||
est défini comme étant l'opérateur de concaténation. Plus spécifiquement, le mode SQL MySQL contientPIPES_AS_CONCAT
. Référence: dev.mysql.com/doc/refman/5.0/en/…concat
place de||
J'ai proposé cette modification sur la réponse de Dion Truter pour le rendre plus facile avec de nombreux tableaux:
Cela renvoie le tout dans un seul champ, vous pouvez donc copier une fois et supprimer toutes les tables (à utiliser
Copy Field Content (unquoted)
dans Workbench). Si vous avez BEAUCOUP de tables, vous pouvez atteindre certaines limitesGROUP_CONCAT()
. Si c'est le cas, augmentez la variable max len (etmax_allowed_packet
, si nécessaire).la source
Un liner pour supprimer toutes les tables d'une base de données donnée:
L'exécution de cette opération supprimera toutes les tables de la base de données DATABASE_NAME.
Et une bonne chose à ce sujet est que le nom de la base de données n'est écrit explicitement qu'une seule fois.
la source
La recherche sur le sujet m'amène toujours à cette question SO donc voici le code mysql qui supprime les DEUX tables et vues:
la source
Voici une façon automatisée de le faire via un script bash:
la source
Si sous Linux (ou tout autre système prenant en charge la tuyauterie, l'écho et grep), vous pouvez le faire avec une seule ligne:
Je sais que c'est une vieille question, mais je pense que cette méthode est rapide et simple.
la source
En php, c'est aussi simple que:
N'oubliez pas de changer YOURDB pour le nom de votre base de données, et bien sûr l'utilisateur / pass.
la source
Dans un shell Linux comme bash / zsh:
Cela générera les commandes, puis les dirigera immédiatement vers une 2e instance client qui supprimera les tables.
Le morceau intelligent est bien sûr copié à partir d'autres réponses ici - je voulais juste une doublure (ish) copiable et collable pour faire réellement le travail que l'OP voulait.
Notez bien sûr que vous devrez également mettre vos informations d'identification (deux fois) dans ces commandes mysql, sauf si vous avez une configuration de sécurité très faible. (ou vous pouvez alias votre commande mysql pour inclure vos crédits.)
la source
Mettez ici quelques commentaires utiles de Jonathan Watt pour supprimer toutes les tables
Cela m'aide et j'espère que cela pourrait être utile
la source
Supprimez toutes les tables de la base de données avec une seule ligne depuis la ligne de commande:
Où [nom_utilisateur], [mot de passe], [nom_hôte] et [nom_base_de_données] doivent être remplacés par des données réelles (utilisateur, mot de passe, nom d'hôte, nom de base de données).
la source
Ceci est un assez vieux post, mais aucune des réponses ici n'a vraiment répondu à la question à mon avis, donc j'espère que mon post aidera les gens!
J'ai trouvé cette solution sur une autre question qui fonctionne très bien pour moi:
Cela va en fait vider toutes vos tables dans la base de données
DB_NAME
, et non seulement afficher laTRUNCATE
ligne de commande.J'espère que cela t'aides!
la source
En s'appuyant sur la réponse de @Dion Truter et @Wade Williams, le script shell suivant supprimera toutes les tables, après avoir d'abord montré ce qu'il est sur le point d'exécuter, et vous donnant une chance d'interrompre en utilisant Ctrl-C.
la source
Cette solution est basée sur la réponse @SkyLeach mais avec la prise en charge de la suppression de tables avec des clés étrangères.
la source
la source
Simple et clair (peut-être).
Ce n'est peut-être pas une solution sophistiquée, mais cela m'a fonctionné et m'a sauvé la journée.
Fonctionné pour la version serveur: 5.6.38 MySQL Community Server (GPL)
Étapes que j'ai suivies:
Shell MySQL
la source
J'utilise ce qui suit avec un serveur MSSQL:
Remplacez YOUR_DATABASE par le nom de votre base de données ou supprimez l'intégralité de l'instruction IF (j'aime la sécurité supplémentaire).
la source
Jusqu'à présent, la meilleure solution pour moi
Sélectionnez Base de données -> Clic droit -> Tâches -> Générer des scripts - ouvrira l'assistant de génération de scripts. Après avoir choisi les objets dans l'option de script définie, cliquez sur le bouton Avancé . Sous "Script DROP and CREATE", sélectionnez Script DROP .
Script de lancement.
la source