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

MySQL DROP toutes les tables, en ignorant les clés étrangères

J'ai trouvé utile l'ensemble généré d'instructions de suppression et je recommande ces modifications :

  1. Limitez les gouttes générées à votre base de données comme ceci :
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

Remarque 1 :Cela n'exécute pas les instructions DROP, cela vous en donne simplement une liste. Vous devrez couper et coller la sortie dans votre moteur SQL pour les exécuter.

Remarque 2 :Si vous avez des VIEWS, vous devrez corriger chaque DROP TABLE `VIEW_NAME` déclaration à DROP VIEW `VIEW_NAME` manuellement.

  1. Remarque, par http://dev.mysql .com/doc/refman/5.5/en/drop-table.html , déposer en cascade est inutile / trompeur :

Par conséquent, pour que les instructions drop fonctionnent si vous avez besoin :

SET FOREIGN_KEY_CHECKS = 0

Cela désactivera les contrôles d'intégrité référentielle - donc lorsque vous aurez terminé d'effectuer les suppressions dont vous avez besoin, vous souhaiterez réinitialiser la vérification des clés avec

SET FOREIGN_KEY_CHECKS = 1
  1. L'exécution finale devrait ressembler à :
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

NB :pour utiliser la sortie de SELECT plus facilement, l'option mysql -B peut aider.