Hay un comando de MySQL para implementar algo así como "eliminar tablas, excepto t1,b2"?

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

  •  12-09-2019
  •  | 
  •  

Pregunta

Quiero mantener t1,t2 y soltar todas las otras tablas.

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top