Estructura · operaciones destructivas

TRUNCATE TABLE

Vacía una tabla completa conservando su definición, pero sus efectos y posibilidades de reversión dependen del motor.

Lectura: 6–8 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué elimina TRUNCATE TABLE

TRUNCATE TABLE elimina todas las filas de una tabla sin eliminar la tabla. Sus columnas, restricciones e índices continúan existiendo.

No permite WHERE: la operación siempre afecta al conjunto completo. Por eso debe reservarse para situaciones en las que realmente quieres vaciar la tabla, como datos temporales o una carga de prueba que se va a reconstruir.

Sintaxis básica

Vaciar una tabla
TRUNCATE TABLE sesiones_temporales;

Antes de ejecutar una operación destructiva, comprueba el objeto y el volumen afectado:

Comprobación previa
SELECT COUNT(*) AS filas_actuales
FROM sesiones_temporales;
Ejemplo de preflight con la base educativa
ConsultaResultadoDecisión
COUNT(*) FROM pedidos18 filasTRUNCATE afectaría a las 18
Pedidos cancelados3 filasUsa DELETE ... WHERE si solo quieres esas tres

Una comprobación previa convierte una intención vaga («limpiar pedidos») en una decisión medible. Si el número no coincide con lo esperado, detén la operación.

TRUNCATE, DELETE y DROP

OperaciónFilasEstructuraPermite filtro
DELETEAlgunas o todasSe conservaSí, con WHERE
TRUNCATE TABLETodasSe conservaNo
DROP TABLETodasSe eliminaNo

La diferencia no es solo de velocidad. Los permisos, desencadenadores, claves foráneas, contadores de identidad y transacciones pueden comportarse de forma distinta.

No supongas que siempre puede deshacerse. PostgreSQL y SQL Server permiten revertir TRUNCATE dentro de una transacción en sus condiciones documentadas. MySQL lo trata como DDL, provoca una confirmación implícita y no permite revertirlo como una operación DML normal.

Error frecuente

Usarlo como sustituto de DELETE con filtro

TRUNCATE TABLE pedidos WHERE estado = 'cancelado' no es válido. Si necesitas conservar parte de las filas, utiliza DELETE ... WHERE ... y revisa primero la selección equivalente.

También puede fallar cuando otras tablas hacen referencia a la tabla mediante claves foráneas. Las reglas exactas y las opciones como CASCADE dependen del motor.

Comprueba lo aprendido

Básica · seguridad destructiva

Elige la operación y demuestra su alcance

La tabla pedidos contiene 18 filas, de las que 3 están canceladas. Quieres retirar solo las canceladas y conservar las demás. Escribe primero la consulta de comprobación y después la operación adecuada.

Compatibilidad entre motores

PostgreSQL, MySQL, SQL Server y Oracle incluyen TRUNCATE TABLE, pero no comparten todos sus efectos. PostgreSQL puede revertirlo dentro de una transacción y ofrece RESTART IDENTITY y CASCADE; también adquiere un bloqueo exclusivo. MySQL lo trata como DDL, realiza una confirmación implícita y recrea la tabla. SQL Server reinicia identidades y permite reversión dentro de una transacción. SQLite no implementa TRUNCATE TABLE; utiliza DELETE FROM tabla, con una optimización interna cuando no existe filtro.

Qué debes recordar

  • TRUNCATE TABLE elimina todas las filas y conserva la tabla.
  • No admite WHERE.
  • Su reversión, permisos y efectos sobre identidades cambian entre motores.
  • Comprueba claves foráneas y realiza una verificación previa antes de ejecutarlo.

Conceptos relacionados

Fuentes técnicas consultadas