¿Cómo eliminar todas las tablas MySQL de la línea de comandos sin SOLTAR permisos de base de datos? [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Cómo puedo soltar todas las tablas en MySQL de Windows, utilizando el símbolo del sistema? La razón por la que quiero hacer esto es que nuestro usuario tiene acceso a la base de datos drops, pero no tiene acceso para volver a crear la base de datos en sí, por esta razón debemos soltar las tablas manualmente. ¿Hay alguna manera de dejar caer todas las mesas a la vez? Tenga en cuenta que la mayoría de las tablas están vinculadas con claves foráneas por lo que tendrían que ser eliminadas en un orden específico.
5 answers
Puede generar una instrucció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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-01-14 08:22:18
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;
Este script no generará error con resultado NULO en caso de que ya haya eliminado todas las tablas de la base de datos agregando al menos una tabla inexistente - "dummy".
Y se arregló en caso de que tenga 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 ejecute el script desde la base de datos que desea eliminar. O ejecute esto antes:
USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;
Gracias a Steve Horvath por descubrir el problema con backsticks.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-13 04:57:43
Prueba esto.
Esto funciona incluso para tablas con restricciones (relaciones de clave foránea). Alternativamente, puede simplemente soltar la base de datos y volver a crear, 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 comprobación de claves foráneas, agregue show table
al final del script generado y ejecute muchas veces hasta que el comando show table
resulte en un conjunto vacío.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-01 11:34:55
Puede drop el database
y luego recrear con el siguiente:-
mysql> drop database [database name];
mysql> create database [database name];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-10 08:21:31
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();" Esto debería ser "WHERE table_schema = 'INSERTE EL NOMBRE DE LA BASE DE DATOS EN LA QUE SE PRODUCIRÁ LA IMPORTACIÓN';"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:53