¿Cómo descartar todas las tablas de MySQL desde la línea de comandos?

29

Normalmente abro Terminal.app y me conecto a una base de datos remota de MySQL.

Luego uso este comando para soltar una tabla:

mysql> drop table [table name];

Pero lo que necesito es la línea de comando para colocar todas las tablas en la base de datos.

Si yo uso:

mysql> drop database [database name];

Destruiré la base de datos por completo y no podré volver a crear tablas. Estoy en lo cierto?

chefnelone
fuente

Respuestas:

27

Puede soltar la base de datos y luego volver a crearla de inmediato:

mysql> drop database [database name];
mysql> create database [database name];

O podría usar un script para colocar cada tabla en la base de datos.

William Jackson
fuente
ok, solo para estar seguro: me conecto a la base de datos remota en la Terminal con esta línea: / Aplicaciones / MAMP / Library / bin / mysql -h 80.54.554.10 -u adm_user -p my_db . Después de soltar y crear la base de datos como dijiste, ¿tendré que cambiar estos valores de conexión o seguirán siendo los mismos?
chefnelone
1
@chef: descartar todas las tablas y descartar toda la base de datos no tiene el mismo efecto. Si descarta solo las tablas, quedarán permisos para toda la base de datos, no así si descarta / recrea la base de datos.
Nifle
10
@chefnelone: ​​¡Ten cuidado! Al eliminar una base de datos, también se eliminan los procedimientos almacenados y las vistas definidas por el usuario.
RolandoMySQLDBA
Muy claro para mi. Iré con el script para eliminar cada tabla.
chefnelone
1
es totalmente inseguro, vea los comentarios http://stackoverflow.com/a/12403742/1713660
vladkras
10

Puedes probar el siguiente comando:

mysqldump --no-data --add-drop-table DB_NAME | grep ^DROP | mysql -v DB_NAME

O:

mysql --silent --skip-column-names -e "SHOW TABLES" DB_NAME | xargs -L1 -I% echo 'DROP TABLE `%`;' | mysql -v DB_NAME

¿Dónde DB_NAMEestá el nombre de tu base de datos? Las credenciales de la base de datos puede especificarlas ~/.my.cnfo agregarlas al comando (por ejemplo -uroot -proot).

Este método tiene algunas ventajas sobre colocar y crear la base de datos en caso de que el usuario de la base de datos no tenga permiso para colocarla.

kenorb
fuente
1
Segundo ejemplo confirmado, increíble. Agregue credenciales de db como marcas adicionales antes --silenty -v/ o --verboserespectivamente, como:--user=username --password=password --host=host.name
aquí
Buena idea. Pero tenga algún problema cuando hay una LLAVE EXTRANJERA Agrego | sort -ra la línea inversa, pero aún no es compatible con algunos db.
Fancyoung
2

mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEHERE | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%;' | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE

sveilleux2
fuente
2
¡Bienvenido a Super User! Si bien esto puede responder la pregunta, sería una mejor respuesta si pudiera explicar por qué lo hace. Estamos buscando respuestas integrales de alta calidad que brinden alguna explicación y contexto. No solo dé una respuesta de una línea; explica por qué tu respuesta es correcta, idealmente con citas. Las respuestas que no incluyen explicaciones pueden eliminarse. Además, verifique su formato.
G-Man dice 'Restablecer a Monica'
No olvide establecer foreign_key_checks = 1 después de soltar tablas: consulte stackoverflow.com/a/2873991/4306855 mysql -u USERHERE -pPASSWORDHERE --silent --skip-column-names -e "SHOW TABLES" DATABASENAMEAMEERE AQUÍ | xargs -L1 -I% echo 'SET FOREIGN_KEY_CHECKS = 0; DROP TABLE%; SET FOREIGN_KEY_CHECKS = 1; ' El | mysql -u USERHERE -pPASSWORDHERE -v DATABASENAMEHERE
toto21