Cómo eliminar todas las tablas en MySQL

Hoy he tenido la necesidad de eliminar todas las tablas en MySQL. El servidor de producción no tiene phpMyAdmin, que es mi herramienta favorita en mi entorno de desarrollo para gestionar bases de datos MySQL. Así que estaba atascado con la consola de MySQL, y necesitaba una manera fácil de hacer el trabajo.

Como siempre digo «Búscalo en Google».

Encontré un elegante script en SOW. En este artículo, describiré lo que hace línea por línea.

Este código elimina todas las tablas de la base de datos actualmente seleccionada
SET FOREIGN_KEY_CHECKS = 0;

Esta línea desactiva las restricciones de clave foránea. Si dos tablas están asociadas entre sí, entonces no se puede eliminar ninguna de ellas. La restricción de clave foránea no le permite hacerlo.

SET GROUP_CONCAT_MAX_LEN=32768;

Esta línea establece la longitud máxima de la función CONCAT. En las siguientes líneas del script verás una concatenación. En algunas configuraciones de MySQL este valor puede ser demasiado bajo. Así que para evitar posibles errores, lo establecemos lo suficientemente grande.

SET @tables = NULL;

Esta es la variable en la que almacenamos el nombre de las tablas.

SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables FROM information_schema.tables WHERE table_schema = (SELECT DATABASE());

Recuerda que todo tu esquema mysql se almacena en la base de datos information_schema. SELECT DATABASE() se utiliza para determinar la base de datos utilizada actualmente. Esta línea selecciona la lista de tablas en la base de datos actual, y las decora con el carácter (`), y el resultado final será almacenado en la variable tables así, `table_1`, `table_2`, …, `table_n`.

SELECT IFNULL(@tables,'dummy') INTO @tables;

Esta línea pone «dummy» a la variable tables si la variable es NULL. Esta línea asegura que la variable tables nunca sea NULL.

SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);

Esta línea añade «DROP TABLE IF EXISTS» antes de su variable tables. Así que el resultado final será DROP TABLE IF EXISTS `table_1`, `table_2`, …, `table_n`.

PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

No es necesario separar estas tres líneas. Estas líneas ejecutan la sentencia SQL en la variable de las tablas.

SET FOREIGN_KEY_CHECKS = 1;

Finalmente esta línea habilita la opción de comprobación de restricciones de clave foránea.

Me ha gustado mucho este pequeño script. Es realmente práctico. Espero que os ayude a entender mejor su funcionamiento.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.