vaciar una todos todas tablas los las eliminar datos borrar mysql command-line sql-drop

todas - eliminar todos los datos de una base de datos mysql



¿Cómo eliminar todas las tablas MySQL de la línea de comandos sin permisos de base de datos DROP? (5)

La respuesta aceptada no funciona para bases de datos que tienen un gran número de tablas, por ejemplo, bases de datos Drupal. En su lugar, vea el script aquí: https://stackoverflow.com/a/12917793/1507877 que funciona en MySQL 5.5. PRECAUCIÓN: Alrededor de la línea 11, hay un "WHERE table_schema = SCHEMA ();" En su lugar, debería ser "DONDE table_schema = ''INSERTE EL NOMBRE DE LA BASE DE DATOS EN QUE IMPORTA LA IMPORTACIÓN'';"

Esta pregunta ya tiene una respuesta aquí:

¿Cómo descarto todas las tablas en Windows MySQL, usando el símbolo del sistema? La razón por la que quiero hacer esto es que nuestro usuario tiene acceso a las gotas de la base de datos, pero no a la recreación de la base de datos en sí, por lo que debemos eliminar las tablas manualmente. ¿Hay alguna forma de soltar todas las mesas a la vez? Tenga en cuenta que la mayoría de las tablas están vinculadas con claves externas, por lo que tendrían que eliminarse en un orden específico.


La versión de @Devart es correcta, pero aquí hay algunas mejoras para evitar errores. He editado la respuesta de @Devart, pero no fue aceptada.

SET FOREIGN_KEY_CHECKS = 0; SET GROUP_CONCAT_MAX_LEN=32768; SET @tables = NULL; SELECT GROUP_CONCAT(''`'', table_name, ''`'') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE()); SELECT IFNULL(@tables,''dummy'') INTO @tables; SET @tables = CONCAT(''DROP TABLE IF EXISTS '', @tables); PREPARE stmt FROM @tables; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET FOREIGN_KEY_CHECKS = 1;

Esta secuencia de comandos no generará un error con el resultado NULO en el caso de que ya haya eliminado todas las tablas de la base de datos agregando al menos una tabla "ficticia" no existente.

Y se solucionó en caso de tener muchas tablas.

Y este pequeño cambio para soltar toda la vista existe en la base de datos

SET FOREIGN_KEY_CHECKS = 0; SET GROUP_CONCAT_MAX_LEN=32768; SET @views = NULL; SELECT GROUP_CONCAT(''`'', TABLE_NAME, ''`'') INTO @views FROM information_schema.views WHERE table_schema = (SELECT DATABASE()); SELECT IFNULL(@views,''dummy'') INTO @views; SET @views = CONCAT(''DROP VIEW IF EXISTS '', @views); PREPARE stmt FROM @views; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET FOREIGN_KEY_CHECKS = 1;

Se supone que ejecuta el script desde la base de datos que desea eliminar. O ejecuta esto antes:

USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;

Gracias a Steve Horvath por descubrir el problema con backticks.


Prueba esto.

Esto funciona incluso para tablas con restricciones (relaciones de clave externa). Alternativamente, puede simplemente eliminar la base de datos y volver a crearla, pero es posible que no tenga los permisos necesarios para hacerlo.

mysqldump -u[USERNAME] -p[PASSWORD] / --add-drop-table --no-data [DATABASE] | / grep -e ''^DROP /| FOREIGN_KEY_CHECKS'' | / mysql -u[USERNAME] -p[PASSWORD] [DATABASE]

Para superar los efectos de verificación de clave externa, agregue show table al final del script generado y ejecútelo varias veces hasta que el comando show table genere un conjunto vacío.


Puede eliminar la database y luego volver a crearla con lo siguiente:

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


Puede generar una declaración como esta: DROP TABLE t1, t2, t3, ... y luego usar instrucciones preparadas para ejecutarla:

SET FOREIGN_KEY_CHECKS = 0; SET @tables = NULL; SELECT GROUP_CONCAT(table_schema, ''.'', table_name) INTO @tables FROM information_schema.tables WHERE table_schema = ''database_name''; -- specify DB name here. SET @tables = CONCAT(''DROP TABLE '', @tables); PREPARE stmt FROM @tables; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET FOREIGN_KEY_CHECKS = 1;