Categorías: Tutoriales

Diferencia entre DELETE, TRUNCATE y DROP en SQL

Cuando manejamos una base de datos SQL, además de manejar creaciones de tablas (CREATE TABLE), inserciones (INSERT), consultas (SELECT) y actualizaciones (UPDATE); dentro de las operaciones básicas también tenemos las que implican borrado. Borrado de diferentes tipos: de filas que cumplan una serie de condiciones, de todos los datos de una tabla o de la tabla con su estructura. Veamos cada una de ellas, con su sintaxis y un ejemplo.

Manejamos para el ejemplo una tabla entradas, que trata sobre la entradas de un blog y que almacena básicamente la siguiente información: identificador, título, cuerpo y tiempo de salida.

DELETE

Borra una serie de filas de la tabla. Podemos usar una claúsula WHERE para limitar las filas a borrar, a las que cumplan una condición. La sintaxis sería:

DELETE FROM nombre_tabla WHERE condicion

Para nuestro caso:

DELETE FROM entradas WHERE id = 2;

TRUNCATE

A diferencia de DELETE, TRUNCATE elimina todas las filas de la tabla sin borrar la tabla. También resetea los contadores de auto incremento a 0. No borra la tabla como tal, la llamada estructura, por lo que luego puede comenzar a hacer inserciones. La sintaxis es:

TRUNCATE TABLE nombre_tabla;

Y para nuestro caso:

TRUNCATE TABLE entradas;

DROP

Finalmente llegamos a DROP. A diferencia de la anterior, DROP no sólo elimina los datos, sino que también eliminar la estructura de la tabla.

DROP TABLE nombre_tabla;

Y para nuestro caso:

DROP TABLE entradas;

DROP DATABASE

A modo de bonus os traigo una instrucción más. Es idéntica a la anterior pero en lugar de borrar una tabla, borra una base de datos al completo. Podemos incluir en la sentencia IF EXISTS de forma que evitemos el error en caso de que no exista la base de datos (muy útil a la hora de hacer copias de seguridad de las bases de datos).

DROP DATABASE [IF EXISTS] nombre_base_datos;

Y para nuestro caso:

DROP DATABASE blog;

Señalar que en MySQL no eliminar la estructura de permisos asociada a la base de datos. Para ello usaremos GRANT, pero de eso ya hablaremos en otra entrada en la que comentaremos los permisos con MySQL.

F. Javier Carazo Gil

Cofundador de CODECTION, empresa especializada en WordPress, autor de un libro sobre WordPress (el primero en español) y multitud de artículos (en medios físicos y virtuales) sobre el tema. Participa en la comunidad WordPress de forma activa siendo parte del equipo organizador de la WordPress Meetup de Córdoba, dando charlas en diferentes WordCamp y siendo autor y coautor de multitud de plugins libres y premium para WordPress de gran éxito.

Ver comentarios

  • Adicionalmente y a modo de dato adicional, si se desea vaciar toda la tabla es mas performante un TRUNCATE que un DELETE sin cláusula WHERE debido a que el motor de base de datos no guarda un registro de lo borrado en su log interno. Por otro lado para ejecutar un TRUNCATE requiere sus propios permisos. Por último y como el título de esta entrada hace mención a SQL (sin especificar una Base de Datos, por mas que luego se haga mención de MySQL), cabe destacar que DB2 no tiene dicha sentencia o mejor dicho la tiene pero sirve para otra cosa; por supuesto hay otra manera para llevar a cabo la misma tarea.

  • @Sebastián: Gracias por el apunte, verdaderamente enriquecedor. Por eso mismo hablaba de SQL y no de ningún SGBD en concreto, no conocía el dato de DB2.

Entradas recientes

DeepSeek

2 días hace

Contacto

2 semanas hace

Smart-tv mute

2 semanas hace

STEAM OS

3 semanas hace

2025

4 semanas hace

El podcast de Linux Hispano – #072 – El hardware libre debe consolidarse como el software libre

https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.

1 mes hace