Lección 9.2: Las sentencias TRUNCATE y DROP TABLE
En la lección anterior, aprendimos cómo crear tablas con CREATE TABLE. Pero en el trabajo real con bases de datos, es importante no solo crear estructuras, sino también entender cómo vaciar tablas o eliminarlas por completo. Para eso, SQL proporciona las sentencias TRUNCATE y DROP TABLE.
Ambas pertenecen al Lenguaje de Definición de Datos (DDL), pero resuelven tareas diferentes. TRUNCATE elimina rápidamente todas las filas de una tabla, mientras que DROP TABLE elimina la tabla misma junto con su estructura.
Qué hace TRUNCATE
La sentencia TRUNCATE elimina todas las filas de una tabla, pero la tabla misma permanece.
Después de ejecutar TRUNCATE:
- la estructura de la tabla se conserva;
- los nombres de las columnas, tipos de datos y restricciones permanecen;
- la tabla queda vacía;
- en muchos SGBD, la operación es más rápida que un
DELETEgrande.
Sintaxis de TRUNCATE
TRUNCATE TABLE table_name;
Ejemplo de TRUNCATE
TRUNCATE TABLE logs;
Después de eso, la tabla logs seguirá existiendo en la base de datos, pero todas sus filas serán eliminadas.
Qué hace DROP TABLE
La sentencia DROP TABLE elimina una tabla por completo.
Después de ejecutar DROP TABLE:
- todos los datos de la tabla son eliminados;
- la estructura de la tabla es eliminada;
- la tabla ya no existe en la base de datos;
- no puede ser referenciada en consultas posteriores a menos que sea creada nuevamente.
Sintaxis de DROP TABLE
DROP TABLE table_name;
Ejemplo de DROP TABLE
DROP TABLE old_reports;
Después de eso, la tabla old_reports será completamente eliminada de la base de datos.
Cómo se diferencia TRUNCATE de DROP TABLE
Aunque ambas sentencias eliminan datos, hay una diferencia fundamental entre ellas.
1. Qué es exactamente lo que se elimina
TRUNCATEelimina solo filas.DROP TABLEelimina tanto las filas como la tabla misma.
2. Si la tabla aún se puede usar
- Después de
TRUNCATE, la tabla permanece y se pueden insertar nuevos datos en ella nuevamente. - Después de
DROP TABLE, la tabla ha desaparecido y debe ser recreada antes de que pueda ser utilizada nuevamente.
3. Cuándo usarlo
TRUNCATEes adecuado cuando necesitas vaciar rápidamente una tabla mientras mantienes su estructura.DROP TABLEes adecuado cuando la tabla ya no es necesaria en absoluto.
Cómo se diferencia TRUNCATE de DELETE
Los principiantes a menudo comparan TRUNCATE con DELETE, porque ambos comandos pueden eliminar datos de una tabla.
Las principales diferencias son:
DELETEse puede usar conWHEREpara eliminar solo parte de las filas;TRUNCATEelimina todas las filas de la tabla de una vez;DELETEpertenece a DML, mientras queTRUNCATEgeneralmente se trata como DDL;TRUNCATEes a menudo más rápido en muchos SGBD cuando se debe vaciar toda la tabla;- el comportamiento relacionado con el registro, la reversión y los reinicios del contador de identidad depende del SGBD específico.
Si necesitas eliminar solo parte de los datos, DELETE suele ser la opción correcta. Si necesitas vaciar rápidamente toda la tabla pero mantener su estructura, TRUNCATE es a menudo más conveniente.
Qué tener en cuenta
Al usar TRUNCATE y DROP TABLE, es importante recordar algunas reglas:
- siempre verifica si necesitas eliminar solo los datos o toda la estructura de la tabla;
- no uses
DROP TABLEsi la estructura de la tabla aún será necesaria; - no reemplaces
DELETEconTRUNCATEsi necesitas eliminar solo parte de las filas; - recuerda que en algunos SGBD
TRUNCATEno se puede usar si la tabla es referenciada por claves foráneas; - ten en cuenta que el comportamiento de
TRUNCATEy el soporte de reversión dependen del SGBD específico.
Usar estas sentencias incorrectamente puede llevar a la pérdida de datos o de la estructura de la tabla.
Ejemplo práctico
Imagina que tenemos una tabla auxiliar llamada daily_import en la que se cargan datos intermedios de un sistema externo todos los días.
Si la tabla se utiliza regularmente pero debe ser completamente vaciada antes de cada nueva carga, TRUNCATE es apropiado:
TRUNCATE TABLE daily_import;
Después de eso, la estructura de la tabla permanece, y nuevos datos pueden ser cargados en ella nuevamente.
Si la tabla fue creada solo para una tarea única y ya no es necesaria, puede ser eliminada por completo:
DROP TABLE daily_import;
En el primer caso, preparamos la tabla existente para su reutilización. En el segundo, eliminamos completamente un objeto que ya no es necesario de la base de datos.
Conclusiones clave de esta lección:
TRUNCATEelimina todas las filas de una tabla pero mantiene su estructura.DROP TABLEelimina tanto los datos como la tabla misma.TRUNCATEyDELETEresuelven problemas similares, pero funcionan de manera diferente.- Antes de usarlos, es importante entender si necesitas vaciar una tabla o eliminarla por completo.
- El comportamiento de
TRUNCATEyDROP TABLEpuede diferir ligeramente entre SGBD.
En la próxima lección, veremos las tablas temporales y entenderemos cuándo son convenientes para resultados intermedios.