Truncate vs Delete en MySQL (Diferencias)

19 marzo, 2013
Jhonnyf

Si lo que deseas es eliminar datos de una tabla, en MySQL tienes 2 formas de hacerlo, normalmente usamos el delete from table para ese tipo de acciones, es un DML ( lenguaje de manipulación de datos) por tanto admite parámetros usando condiciones, es decir soporta la clausula WHERE además que te devuelve el numero de archivos afectados en la operación y puedes incluso usar el LIMIT. recuerden que el DELETE borra registros 1 por 1 además que la tabla recuerda el valor AUTO_INCREMENT en caso la hayas vaciado.

En el caso del TRUNCATE lo que se realiza es destruir la tabla y luego recrearla ya que es un DLL (lenguaje de definición de datos), lo que lo hace más rápido y no devuelve registros afectados, TRUNCATE TABLE es una extensión de Oracle SQL adoptada en MySQL. y optimizado para MySQL 5.0.3, antes de la versión 5.0.3 ambos comandos son prácticamente lo mismo.

Usando DELETE es posible de hacer:

y si quieres eliminar todos los regitros de la tabla simplemente no le pones la clausula WHERE, recuerda que este tipo de eliminación lo hace registro por registro
 

Usando TRUNCATE:

TRUNCATE TABLE muy rápido. La operación se mapea a DELETE si hay restricciones de clave foránea que referencien la tabla. Para otros motores, TRUNCATE TABLE difiere de DELETE FROM en los siguientes puntos en MySQL 5.0.3:

  • Las operaciones de truncado destruyen y recrean la tabla, que es mucho más rápido que borrar registros uno a uno.
  • Las operaciones de truncado no son transaccionales; ocurre un error al intentar un truncado durante una transacción o un bloqueo de tabla.
  • No se retorna el número de registros borrados.
  • Mientras el fichero de definición de la tabla tbl_name.frm sea válido, la tabla puede recrearse como una vacía con TRUNCATE TABLE, incluso si los ficheros de datos o de índice se han corrompido.
  • El tratador de tablas no recuerda el último valor AUTO_INCREMENT usado, pero empieza a contar desde el principio. Esto es cierto incluso para MyISAM y InnoDB, que normalmente no reúsan valores de secuencia.

Resumen de Diferencias:

  1. Ambas eliminan los datos, no la estructura de la tabla.
  2. DELETE permite la eliminación condicional de los registros.
  3. DELETE es una operación registrada en el log de transacciones, y registrar cada eliminación de manera individual.
  4. TRUNCATE es una operación registrada en el log de transacciones, pero en conjunto, no por eliminación individual. TRUNCATE se registra como una liberación de las páginas de datos en las cuales existen los datos.
  5. TRUNCATE es más rápida que DELETE.
  6. Ambas se pueden deshacer con un ROLLBACK.
  7. TRUNCATE reiniciará el contador para una tabla que contenga una columna AUTO_INCREMENT .
  8. DELETE mantendrá el contador de la tabla para una columna IDENTITY.
  9. TRUNCATE no desencadena un TRIGGER, DELETE sí.
  10. TRUNCATE es un comando DDL(lenguaje de definición de datos como un CREATE, ALTER, DROP, etc) mientras que DELETE es un DML(lenguaje de manipulación de datos como un SELECT, INSERT, UPDATE).

1 comentario. Dejar nuevo

santiago bernal
18 junio, 2015 4:54 PM

Estimado, excelente explicación sobre el tema, me aclaró muchas dudas.
muchas gracias.

pda: te recomiendo utilizar facebook commets en vez de usar los de wordpress.

Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *