DROP TABLE
La sentencia DROP TABLE elimina una o más tablas de la base de datos. Se eliminan la estructura de la tabla, todos sus datos, índices, triggers y permisos asociados. Es una operación irreversible: una vez eliminada, la tabla y sus datos desaparecen permanentemente.
Sintaxis
DROP TABLE nombre_tabla;Eliminar una tabla
CREATE TABLE temporal (
id INT PRIMARY KEY,
dato VARCHAR(50)
);
INSERT INTO temporal VALUES (1, 'prueba');DROP TABLE temporal;Query OK, 0 rows affected (0.02 sec)
La tabla, sus datos y cualquier índice asociado se eliminan inmediatamente.
IF EXISTS
Si intentas eliminar una tabla que no existe, MySQL devuelve un error:
DROP TABLE tabla_inexistente;ERROR 1051 (42S02): Unknown table 'tienda_mysql.tabla_inexistente'
Para evitar el error:
DROP TABLE IF EXISTS tabla_inexistente;Query OK, 0 rows affected, 1 warning (0.00 sec)
MySQL genera una advertencia en lugar de un error. Este patrón es estándar en scripts de migración, donde no puedes garantizar que la tabla exista:
-- Patrón habitual al inicio de un script de migración
DROP TABLE IF EXISTS detalle_pedidos_v2;
DROP TABLE IF EXISTS pedidos_v2;
CREATE TABLE pedidos_v2 (...);
CREATE TABLE detalle_pedidos_v2 (...);Eliminar múltiples tablas
Puedes eliminar varias tablas en una sola sentencia:
CREATE TABLE tabla_a (id INT PRIMARY KEY);
CREATE TABLE tabla_b (id INT PRIMARY KEY);
CREATE TABLE tabla_c (id INT PRIMARY KEY);
DROP TABLE tabla_a, tabla_b, tabla_c;Query OK, 0 rows affected (0.03 sec)
Si usas IF EXISTS con múltiples tablas, MySQL elimina las que existen y genera advertencias para las que no:
DROP TABLE IF EXISTS tabla_a, tabla_b, tabla_inexistente;Las tablas que existen se eliminan. La que no existe genera una advertencia, pero no detiene la operación.
Claves foráneas y dependencias
Si una tabla es referenciada por la clave foránea de otra tabla, no puedes eliminarla directamente:
CREATE TABLE departamentos (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50) NOT NULL
);
CREATE TABLE empleados_dep (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
departamento_id INT,
FOREIGN KEY (departamento_id) REFERENCES departamentos(id)
);DROP TABLE departamentos;ERROR 3730 (HY000): Cannot drop table 'departamentos' referenced by a foreign key constraint 'empleados_dep_ibfk_1' on table 'empleados_dep'.
Tienes tres opciones. La primera es eliminar primero la tabla dependiente:
DROP TABLE empleados_dep;
DROP TABLE departamentos;La segunda es eliminarlas en la misma sentencia, en cualquier orden:
DROP TABLE empleados_dep, departamentos;MySQL resuelve las dependencias internamente cuando ambas tablas se eliminan juntas.
La tercera, útil en scripts, es desactivar temporalmente la comprobación de claves foráneas:
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE departamentos;
DROP TABLE empleados_dep;
SET FOREIGN_KEY_CHECKS = 1;Desactivar FOREIGN_KEY_CHECKS permite eliminar tablas en cualquier orden, pero debes asegurarte de reactivarlo después. Es un patrón común en scripts de reinicialización de bases de datos.
Qué se elimina
DROP TABLE elimina la estructura de la tabla (columnas, tipos, restricciones), todos los datos (filas), los índices de la tabla, los triggers asociados a la tabla, y las particiones si la tabla está particionada.
No elimina las vistas que referencian la tabla (quedan en estado inválido), los procedimientos almacenados que la usan (fallarán al ejecutarse), ni los permisos de usuario sobre la tabla (quedan como registros huérfanos).
DROP TABLE vs TRUNCATE TABLE vs DELETE
Las tres formas de "vaciar" una tabla tienen diferencias importantes:
-- Elimina la tabla completa (estructura + datos)
DROP TABLE nombre_tabla;
-- Vacía los datos, mantiene la estructura
TRUNCATE TABLE nombre_tabla;
-- Elimina filas selectivamente, mantiene la estructura
DELETE FROM nombre_tabla WHERE condicion;DROP TABLE es la más drástica: elimina todo. TRUNCATE TABLE es rápida y vacía la tabla, pero la estructura permanece para insertar datos nuevos. DELETE es la más flexible, permite eliminar filas específicas y se ejecuta dentro de una transacción.
DROP TABLE en producción
Eliminar tablas en un entorno de producción requiere precaución extrema. Antes de ejecutar DROP TABLE:
Verifica que estás en el servidor correcto. Comprueba que la tabla no tiene dependencias activas. Haz un backup:
-- Desde la terminal
-- mysqldump -u root -p tienda_mysql nombre_tabla > backup_tabla.sqlVerifica las dependencias de clave foránea:
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME
FROM information_schema.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = DATABASE()
AND REFERENCED_TABLE_NAME = 'nombre_tabla';Esta consulta muestra todas las tablas que tienen claves foráneas apuntando a la tabla que quieres eliminar.
Tablas del sistema
No puedes eliminar las tablas del sistema de MySQL (mysql, information_schema, performance_schema, sys) con DROP TABLE. Estas tablas son gestionadas internamente por el servidor.
Limpieza
Las tablas de ejemplo de este artículo ya se eliminaron durante los ejemplos. Si quedó alguna:
DROP TABLE IF EXISTS empleados_dep, departamentos;En el siguiente artículo veremos las tablas temporales, un tipo especial de tabla que solo existe durante la sesión actual.
Escrito por Eduardo Lázaro
