Unidad 7. Actualización de datos (VI)
7.9. Borrado masivo - TRUNCATE
Si queremos eliminar todas las filas de una tabla podemos utilizar también la instrucción TRUNCATE TABLE.
TRUNCATE TABLE
[nbBaseDatos.[nbEsquema.]| nbEsquema.]nbTabla [; ]
Esta sentencia quita todas las filas de una tabla sin registrar las eliminaciones individuales de filas. Desde un punto de vista funcional, TRUNCATE TABLE es equivalente a la instrucción DELETE sin una cláusula WHERE; no obstante, TRUNCATE TABLE es más rápida y utiliza menos recursos de registros de transacciones y de sistema.
En comparación con la instrucción DELETE, TRUNCATE TABLE ofrece las siguientes ventajas:
- Se utiliza menos espacio del registro de transacciones.
La instrucción DELETE quita una a una las filas y graba una entrada en el registro de transacciones por cada fila eliminada.
TRUNCATE TABLE quita los datos al cancelar la asignación de las páginas de datos utilizadas para almacenar los datos de la tabla y sólo graba en el registro de transacciones las cancelaciones de asignación de páginas.
- Por regla general, se utilizan menos bloqueos.
Si se ejecuta la instrucción DELETE con un bloqueo de fila, se bloquea cada fila de la tabla para su eliminación. TRUNCATE TABLE siempre bloquea la tabla y la página, pero no cada fila.
- Las páginas cero se conservan en la tabla sin excepciones.
Después de ejecutar una instrucción DELETE, la tabla puede seguir conteniendo páginas vacías. Por ejemplo, no se puede cancelar la asignación de las páginas vacías de un montón sin un bloqueo de tabla exclusivo como mínimo. Si en la operación de eliminación no se utiliza un bloqueo de tabla, la tabla contiene muchas páginas vacías. En el caso de los índices, la operación de eliminación puede dejar páginas vacías, aunque la asignación de estas páginas se puede cancelar rápidamente mediante un proceso de limpieza en segundo plano.
Si la tabla contiene una columna de identidad, el contador para dicha columna se restablece al valor de inicialización definido para ella. Si no se define ningún valor de inicialización, se utiliza el valor predeterminado 1. Para conservar el contador de identidad, se utiliza DELETE.
Pero no todo son ventajas, no se puede utilizar TRUNCATE TABLE en las siguientes tablas:
- Tablas a las que se hace referencia mediante una restricción FOREIGN KEY (las tablas que entran como principales en una relación).
- Tablas que participan en una vista indizada.