Social Icons

twitter facebook google plus linkedin

lunes, 18 de junio de 2012

Delete, Truncate y Drop

Delete From, Truncate Table y Drop Table  son sentencias de SQL que sirven para borrar. Existen en todos los motores de base de datos, pero los tres hacen borrados distintos.

Delete From

Esta sentencia DML se utiliza para eliminar registros según condición, o simplemente, borra todos los registros de la tabla.  No es autocommit, registra todo en el log de transacciones y no altera la estructura de la tabla. Tiene a ser un poco ineficiente al registrar todo. Veamos este ejemplo:

A una tabla con 14 registros, le di la siguiente instrucción:

DELETE FROM Tabla1

Ocurrió lo esperado: Eliminó todos los registros de la tabla y no modificó su estructura. Además, registró todo en el log de transacciones y realizó el commit una vez que ejecutó todos los delete

 

[caption id="attachment_1364" align="alignnone" width="233"]Log transaccional de DELETE FROM Log transaccional de DELETE FROM[/caption]

Tomar en cuenta que todo lo que está dentro del cuadrado rojo corresponde a la eliminación de cada uno de los registros de la tabla. Hay una porción destacada en amarillo. Es ahí cuando realiza el commit.

Cuando se elimina un registro en una tabla que tiene un campo como identity el contador nunca más vuelve a usar el registro identity que se eliminó. Por ejemplo:


Numero color
1 blanco
2 rojo
3 azul

y ejecutamos lo siguiente:

DELETE FROM Tabla WHERE Numero = 2

Va a eliminar el segundo registro y al insertar un campo en la base de datos, quedaría así:

Numero color
1 blanco
3 azul
4 amarillo

Al manipular los datos de la tabla, está sujeto a las restricciones de las claves foráneas.

 

Truncate

Truncate Table, sentencia DDL,  elimina todos los registros de la tabla. A diferencia de Delete From, no escribe en el log de transacciones, por lo que no es posible hacer un rollback.  La otra diferencia que tiene con Delete From, es que no ofrece un borrado selectivo y no se le puede pasar un trigget con ON DELETE.
Ejemplo de la imagen:

[caption id="attachment_1365" align="alignnone" width="300"]Ejemplo de Truncate Table Ejemplo de Truncate Table[/caption]

Como se puede ver en la imagen, no registra todos los datos que elimina. Lo único que hace es un deallocate.

 

Al borrar los datos de un tabla que tiene una columna como identity, el contador vuelve a cero. Veamos el ejemplo:


Numero color
1 blanco
2 rojo
3 azul

y ejecutamos lo siguiente:

TRUNCATE TABLE Tabla

La tabla quedará vacía y al insertar un registro quedará así:

Numero color
1 verde

Al eliminar registros con esta sentencia, está sujeto a las restricciones de las claves foráneas.

 

Drop

Sentencia DDL, que se utiliza para modificar la estructura de una tabla, por ejemplo al eliminar una columna de una tabla, o bien, eliminar la tabla completa.  Al eliminar la tabla completa, lo primero que hace es hacer un borrado de los registros con DELETE, hace un commit y al final borra la tabla.  El registro es bastante grande, así que me disculparán por no poner un ejemplo.

Espero que esto les haya servido de ayuda.