TRUNCATE TABLE en MySQL: cómo vaciar una tabla
Aprende qué hace TRUNCATE TABLE en MySQL, cuándo usarlo y en qué se diferencia de DELETE.
Actualizado el
TRUNCATE TABLE vacía por completo una tabla y no admite WHERE. En MySQL realiza un commit implícito y no puede deshacerse con ROLLBACK.
La sintaxis es directa:
TRUNCATE TABLE nombre_tabla;Ejemplo:
TRUNCATE TABLE logs;Después de ejecutarlo, la tabla sigue existiendo, pero queda vacía.
Diferencia entre TRUNCATE y DELETE
TRUNCATE y DELETE pueden dejar una tabla sin filas, pero no funcionan igual:
| Aspecto | TRUNCATE TABLE en MySQL | DELETE |
|---|---|---|
| Alcance | Toda la tabla | Todas las filas o solo las que cumplan WHERE |
| Tipo de operación | DDL | DML |
| Transacción | Commit implícito; no admite rollback del usuario | Puede revertirse en una transacción con un motor transaccional como InnoDB |
Triggers DELETE | No ejecuta triggers ON DELETE | Sí los dispara |
AUTO_INCREMENT | Reinicia el contador | Normalmente conserva la secuencia |
| Claves foráneas | En InnoDB y NDB no permite truncar si otra tabla la referencia; sí admite la autorreferencia | Se aplican las reglas de la FK |
| Permiso relevante | DROP | DELETE |
Ejemplo con DELETE:
DELETE FROM logs
WHERE fecha < '2024-01-01';Ejemplo con TRUNCATE:
TRUNCATE TABLE logs;Usa DELETE si necesitas borrar solo algunas filas. Usa TRUNCATE si quieres vaciar toda la tabla.
Qué debes tener en cuenta
- Confirma el nombre de la tabla antes de ejecutar la sentencia.
- En InnoDB y NDB,
TRUNCATEno puede vaciar una tabla referenciada por una clave foránea desde otra tabla; una referencia a sí misma es la excepción. - Ten una copia de seguridad o una forma clara de reconstruir los datos.
- En MySQL 8.4, InnoDB admite atomicidad DDL: tras un error o crash del servidor,
TRUNCATEse recupera como completado o no aplicado, nunca a medias. Esto no permite deshacerlo con unROLLBACKmanual:TRUNCATEhace commit implícito.
Ejemplo completo
CREATE TABLE pruebas (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL
);
INSERT INTO pruebas (nombre)
VALUES ('Ana'), ('Luis'), ('Pedro');
TRUNCATE TABLE pruebas;
SELECT * FROM pruebas;El SELECT final no devolverá filas.
Cuándo usar TRUNCATE
TRUNCATE TABLE tiene sentido para vaciar datos de prueba, entornos de staging o tablas que se van a regenerar desde cero. En tablas de logs de producción, valora antes si necesitas conservar el histórico o hacer borrados parciales con DELETE.
No lo uses si necesitas conservar parte de los datos o si no tienes clara la relación de esa tabla con el resto de la base de datos.
En SQL Server, a diferencia de MySQL,
TRUNCATE TABLEsí puede revertirse dentro de una transacción; no traslades esa expectativa entre motores.