Truncate vs Delete en MySQL: Diferencias y usos
Truncate vs Delete. La mayoría de las veces es posible que se pregunte la diferencia entre TRUNCATE vs DELETE en MYSQL, dónde usarlo y cuándo usarlo. En este artículo, cubriré tanto como sea posible.
Truncate vs Delete
Si bien estas dos instrucciones a simple vista realizan lo mismo y es de eliminar los registros de una determinada tabla, pero entre ellos destacan varios factores: La velocidad de ejecución, EL auto incremento, etc.
COMANDO DELETE
DELETE [ LOW_PRIORITY ] [ QUICK ] [ IGNORE ] FROM table [WHERE conditions] [ORDER BY expression [ ASC | DESC ]] [LIMIT number_rows];
- DELETE es un comando DML.
- Después del comando DELETE, si la tabla tiene PrimaryKey con AutoIncrement, el contador AutoIncrement no se restablecerá y se inicia desde el siguiente identificador.
- La instrucción DELETE se ejecuta mediante un bloqueo de fila, cada fila de la tabla se bloquea para su eliminación.
- Podemos especificar filtros en la cláusula WHERE
- Elimina los datos especificados si donde existe la condición de otro lado eliminará todos los datos.
- Eliminar activa un desencadenador porque la operación se registra individualmente.
- Transacción segura. Por lo tanto, todos los datos eliminados se pueden revertir.
- Más lento que truncar porque, mantiene los registros.
- La reversión es posible.
COMANDO TRUNCATE
TRUNCATE TABLE [database_name.]table_name;
- TRUNCATE es un comando DDL.
- Después del comando TRUNCATE, si hay PrimaryKey con AutoIncrement, el contador AutoIncrement se restablecerá a 1.
- TRUNCATE TABLE siempre bloquea la tabla y la página, pero no cada fila.
- No se puede utilizar la condición WHERE.
- Elimina todos los datos de la tabla.
- TRUNCATE TABLE no puede activar un desencadenador porque la operación no registra eliminaciones de filas individuales.
- Más rápido en el rendimiento prudente, porque no mantiene ningún registro.
- No es seguro para transacciones. Por lo tanto, no podemos revertir los datos.
- La reversión no es posible solamente.
Lo Común entre las dos clausulas
- DELETE y TRUNCATE se pueden revertir cuando se usan con TRANSACTION (TRUNCATE se puede revertir en SQL Server, pero no en MySQL).
- DELETE y TRUNCATE mantienen intacta la estructura de la tabla y solo elimina los datos.
- Si hay un PK con incremento automático, truncar restablecerá el contador
Diferencia entre el comando TRUNCATE y DELETE
La diferencia más importante es que las operaciones DELETE son seguras para transacciones y se registran, lo que significa que DELETE se puede revertir.
TRUNCATE | DELETE |
Con esta sentencia podemos vaciar todo el contenido una tabla de una base de datos. La estructura de dicha tabla permace intacta.
TRUNCATE no se puede realizar dentro de una transacción y no se puede revertir. Dado que TRUNCATE no se registra recuperando una tabla TRUNCATEd por error es un problema mucho mayor que recuperarse de un DELETE. |
Esta sentencia elimina una serie de registros/filas de una tabla, si no se especifica la claúsula WHERE se eliminarán todos los registros de la tabla del mismo modo que TRUNCATE.
DELETE fallará si se rompen las restricciones de clave externa; TRUNCATE puede no respetar las restricciones de clave externa (lo hace para las tablas de InnoDB). DELETE activará cualquier desencadenador ON DELETE; TRUNCATE no lo hará. |
Rápides en las dos opciones
Truncar las operaciones quitar y volver a crear la tabla, que es mucho más rápido que eliminar filas una por una, especialmente para tablas grandes.
Dónde usar
Truncar | Delete |
Cuando la tabla se establece en vacío y necesita restablecer las teclas de incremento automático a 1. Es más rápido que DELETE porque elimina todos los datos. DELETE analizará la tabla para generar un recuento de filas afectadas. | Necesita filas para eliminar en función de una cláusula WHERE opcional. necesitan registros y aplicar restricciones de clave externa |
RESUMEN DIFERENCIA
1) Truncate elimina los datos completos de la tabla y el siguiente identificador de incremento automático comenzará con 1 mientras que la eliminación comenzará con el siguiente id.
2) Ambos mantendrán la estructura intacta y eliminarán solo los datos.
3) con delete puedes usar limit mientras que con truncate no puedes.
CONCLUSIÓN
Podemos usar cualquiera de los dos siempre y cuando sepamos lo que hace.
En este artículo hemos visto el funcionamiento, sintaxis, diferencias acerca de estos dos comandos de MySQL y ya somos capaces de elegir un comando para nuestras tablas.
Espero que esta diferencia les ayude a tomar una buena decisión en sus proyectos web