Y at-il une commande MySQL pour implémenter quelque chose comme « tables de chute sauf t1, b2 »?

StackOverflow https://stackoverflow.com/questions/1454328

  •  12-09-2019
  •  | 
  •  

Question

Je veux garder t1, t2 et laisser tomber toutes les autres tables.

Était-ce utile?

La solution

Vous pouvez utiliser information_schema pour trouver des noms de table et même formater les résultats comme un tas de déclarations de DROP.

SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
  FROM information_schema.tables
  WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');

(La fonction de DATABASE() renvoie la base de données actuellement use'd.)

Utilisation PREPARE et EXECUTE, vous pouvez même éviter le copier-coller, et (dans MySQL 5.0.13 et versions ultérieures) écrire une procédure stockée pour le faire.

Autres conseils

Vous pouvez utiliser mysqldump pour générer une liste d'instructions DROP TABLE, filtrer ceux que vous ne voulez pas, puis redirigez de nouveau dans le client mysql. Voici comment nous construisons que jusqu'à

Tout d'abord, voici une liste des déclarations de table DROP TABLE pour la base de données

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP 

Maintenant, nous pouvons tuyau à travers grep -v avec pour inverser le match - nous voulons des déclarations qui ne mentionnent pas les tables nous retenir (une autre façon de le faire serait d'options --ignore table à Mysqldump)

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |  
grep -v 'foo\|bar'

Enfin, une fois que vous êtes confiant, vous pouvez tuyau arrière dans mysql

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \ 
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top