Hay un comando de MySQL para implementar algo así como "eliminar tablas, excepto t1,b2"?
Pregunta
Quiero mantener t1,t2 y soltar todas las otras tablas.
Solución
Puede utilizar information_schema
para encontrar los nombres de tabla, e incluso dar formato a los resultados como un montón de declaraciones DROP
.
SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');
(La función DATABASE()
devuelve la base de datos actualmente use
'd.)
El uso de PREPARE
y EXECUTE
, incluso se podría evitar copiar y pegar, y (en MySQL 5.0.13 y posteriores) escribir un procedimiento almacenado para hacer esto.
Otros consejos
Usted podría utilizar mysqldump para generar una lista de DROP TABLE, filtrar los que no quieren, entonces tubo de nuevo en el cliente de mysql.He aquí cómo construir hasta
Primero, aquí está una lista de DROP TABLE tabla de instrucciones de la base de datos
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP
Ahora podemos tubo que a través de grep con -v para invertir el partido - queremos sentencias que no mencionar las tablas estamos de retención (otra manera de hacer esto sería --ignore-table opciones para mysqldump)
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |
grep -v 'foo\|bar'
Finalmente, una vez que se está seguro, puede que los tubos de nuevo en mysql
mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE