Borrar registros con DELETE y TRUNCATE
En ocasiones es necesario borrar registros de una tabla, y para ello existen dos maneras comunes de hacerlo: con DELETE y con TRUNCATE TABLE.
Ambos comandos SQL pertenecen específicamente al Data manipulation Language DML porque operan sobre el contenido de las tablas; existen algunas diferencias, pero en general ambos permiten eliminar filas dentro de una tabla en específico.
Comando DELETE para eliminar registros
Es el comando SQL más común de los dos, y es que permite borrar desde una registro o todo el contenido de una tabla, siendo la sintáxis general:
DELETE FROM tabla
WHERE condición;
La condición se evaluará para cada registro, y si resulta verdadera se eliminará físicamente el registro correspondiente. El borrado, y esto es importante, se realizará siempre y cuando no se incumpla algún CONSTRAINT que pudiera provocar alguna inconsistencia de la base de datos.
Borrar solo algunos registros con DELETE
Para borrar uno o más registros, se tiene que establecer una condición, en el WHERE, de tal manera que solo los registros que cumplan con la condición serán borrados; así, el siguiente comando
DELETE FROM estudiantes
WHERE edad < 13;
Eliminará los registros de la tabla «estudiantes» que cumplan con que el campo «edad» tengan un valor menor a 13. Si ningún registro cumple con la condición, entonces ninguno registro será afectado.
Borrar todos los registros de una tabla con DELETE
Si lo que se desea es borrar todos los registros de una tabla, lo único que se tiene que hacer es establecer una condición que se cumpla para todos y cada uno de los registros, por lo que la siguiente instrucción podría servir:
DELETE FROM ventas WHERE 1=1;
Registro en el log de transacciones de la instrucción DELETE
En la base de datos se lleva un registros de todas las transacciones que se realizan, llamado log de transacciones, y cuando se ejecuta un comando DELETE se graban los ID’s de los registros eliminados. Esto es importante hacerlo notar porque esta es una de las diferencias con el comando TRUNCATE TABLE
TRUNCATE TABLE para vaciar toda una tabla
Si lo que se quiere es vaciar por completo una tabla se puede utilizar un comando DELETE (como el previamente mostrado) para todos los registros de la tabla, o se puede ocupar el comando TRUNCATE TABLE que hace precisamente eso. La sintaxis es
TRUNCATE TABLE tabla;
En este caso, el comando TRUNCATE TABLE elimina físicamente todos los registros de la tabla, reestableciendo la tabla como si recién se hubiera hecho un CREATE TABLE. En general, se puede pensar en que un TRUNCATE TABLE es parecido a un DROP TABLE seguido de un CREATE TABLE.
Registro en el log de transacciones de la instrucción DELETE
A diferencia del comando DELETE, donde se guardan los ID’s eliminados en el log de transacciones, un TRUNCATE TABLE solo marca las páginas que contenían los datos, para que se puedan reocupar.
Diferencias entre DELETE all y TRUNCATE
- El comando DELETE borra registros, uno a uno, y esto hace más lento el proceso, a diferencia del TRUNCATE TABLE.
- Si el registro a borrar no incumple ningún CONSTRAINT entonces el comando DELETE lo puede borrar, pero un TRUNCATE TABLE tiene las mismas restricciones de un DROP TABLE, por lo que si existe al menos una tabla que tenga una llave foránea vinculada a la tabla por vaciar no se podrá realizar, aunque todas las tablas estén vacías.
- Si existe un campo autonumérico, serial o autoincremental (dependiendo del motor de base de datos estos campos, que se autoincrementan registro a registro) el TRUNCATE TABLE provocará que la numeración se reinicie; en contraste a esto, el DELETE -aunque vacíe la tabla- continuará con la numeración, no la reiniciará.