Saltar al contenido

¿Cuál es la diferencia entre TRUNCATE y DELETE en SQL?

Esta inquietud se puede solucionar de diferentes maneras, pero en este caso te damos la que para nosotros es la solución más completa.

Solución:

Aquí hay una lista de diferencias. He destacado las características específicas de Oracle y espero que la comunidad también pueda agregar la diferencia específica de otros proveedores. Las diferencias que son comunes a la mayoría de los proveedores pueden ir directamente debajo de los títulos, y las diferencias se destacan a continuación.


Visión general

Si desea eliminar rápidamente todas las filas de una tabla, y está realmente seguro de que desea hacerlo, y no tiene archivos externos keys contra las tablas, entonces un TRUNCATE probablemente será más rápido que un DELETE.

Se deben considerar varios problemas específicos del sistema, como se detalla a continuación.


Tipo de declaración

Eliminar es DML, Truncar es DDL (¿Qué es DDL y DML?)


Comprometerse y deshacer

Variable por proveedor

Servidor SQL

Truncar se puede revertir.

PostgreSQL

Truncar se puede revertir.

Oráculo

Debido a que un TRUNCATE es DDL, implica dos confirmaciones, una antes y otra después de la ejecución de la declaración. Truncar, por lo tanto, no se puede revertir, y una falla en el proceso de truncar habrá emitido un compromiso de todos modos.

Sin embargo, vea Flashback a continuación.


Recuperación de espacio

Eliminar no recupera espacio, Truncar recupera espacio

Oráculo

Si usa la cláusula REUSE STORAGE, los segmentos de datos no se desasignarán, lo que puede ser un poco más eficiente si la tabla se va a recargar con datos. La marca de agua alta se restablece.


Alcance de fila

Eliminar se puede utilizar para eliminar todas las filas o solo un subconjunto de filas. Truncar elimina todas las filas.

Oráculo

Cuando se particiona una tabla, las particiones individuales se pueden truncar de forma aislada, por lo que es posible una eliminación parcial de todos los datos de la tabla.


Tipos de objetos

Eliminar se puede aplicar a tablas y tablas dentro de un clúster. Truncar se aplica solo a las tablas o al clúster completo. (Puede ser específico de Oracle)


Identidad del objeto de datos

Oráculo

Eliminar no afecta la identificación del objeto de datos, pero truncar asigna una nueva identificación del objeto de datos a no ser que nunca ha habido una inserción contra la tabla desde su creación. Incluso una sola inserción que se deshaga hará que se asigne una nueva identificación de objeto de datos al truncarse.


Flashback (Oracle)

El flashback funciona en todas las eliminaciones, pero un truncado evita el flashback a los estados anteriores a la operación.

Sin embargo, a partir de 11gR2, la función ARCHIVO FLASHBACK lo permite, excepto en Express Edition

Uso de FLASHBACK en Oracle http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638


Privilegios

Variable

Oráculo

La eliminación se puede otorgar en una tabla a otro usuario o rol, pero no se puede truncar sin usar una concesión DROP ANY TABLE.


Rehacer Deshacer

Eliminar genera una pequeña cantidad de rehacer y una gran cantidad de deshacer. Truncar genera una cantidad insignificante de cada uno.


Índices

Oráculo

Una operación de truncar hace que los índices inutilizables se vuelvan a utilizar. Eliminar no lo hace.


Llaves extranjeras

Un truncado no se puede aplicar cuando un externo habilitado key hace referencia a la tabla. El tratamiento con eliminar depende de la configuración del exterior. keys.


Bloqueo de mesa

Oráculo

Truncar requiere un bloqueo de tabla exclusivo, eliminar requiere un bloqueo de tabla compartido. Por lo tanto, deshabilitar los bloqueos de tablas es una forma de evitar truncar operaciones en una tabla.


Disparadores

Los activadores DML no se activan en un truncado.

Oráculo

Hay activadores DDL disponibles.


Ejecución remota

Oráculo

Truncar no se puede emitir a través de un enlace de base de datos.


Columnas de identidad

Servidor SQL

Truncar restablece la secuencia para los tipos de columna IDENTIDAD, eliminar no.


Conjunto resultante

En la mayoría de las implementaciones, un DELETE declaración puede devolver al cliente las filas que se eliminaron.

por ejemplo, en un subprograma Oracle PL / SQL, podría:

DELETE FROM employees_temp
WHERE       employee_id = 299 
RETURNING   first_name,
            last_name
INTO        emp_first_name,
            emp_last_name;

La diferencia entre truncar y eliminar se enumera a continuación:

+----------------------------------------+----------------------------------------------+
|                Truncate                |                    Delete                    |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing     | We can Rollback after delete.                |
| Truncate.                              |                                              |
|                                        |                                              |
| Example:                               | Example:                                     |
| BEGIN TRAN                             | BEGIN TRAN                                   |
| TRUNCATE TABLE tranTest                | DELETE FROM tranTest                         |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
| ROLLBACK                               | ROLLBACK                                     |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table.      | Delete does not reset identity of table.     |
+----------------------------------------+----------------------------------------------+
| It locks the entire table.             | It locks the table row.                      |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language)      | Its DML(Data Manipulation Language)          |
| command.                               | command.                                     |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it.     | We can use WHERE to filter data to delete.   |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate.   | Trigger is fired.                            |
+----------------------------------------+----------------------------------------------+
| Syntax :                               | Syntax :                                     |
| 1) TRUNCATE TABLE table_name           | 1) DELETE FROM table_name                    |
|                                        | 2) DELETE FROM table_name WHERE              |
|                                        |    example_column_id IN (1,2,3)              |
+----------------------------------------+----------------------------------------------+

SOLTAR

El comando DROP elimina una tabla de la base de datos. También se eliminarán todas las filas, índices y privilegios de las tablas. No se dispararán activadores DML. La operación no se puede revertir.

TRUNCAR

TRUNCATE elimina todas las filas de una tabla. La operación no se puede revertir y no se activará ningún activador. Como tal, TRUNCATE es más rápido y no usa tanto espacio para deshacer como DELETE. El bloqueo de nivel de tabla se agregará al Truncar.

ELIMINAR

El comando DELETE se usa para eliminar filas de una tabla. Se puede usar una cláusula WHERE para eliminar solo algunas filas. Si no se especifica ninguna condición WHERE, se eliminarán todas las filas. Después de realizar una operación ELIMINAR, debe COMPROMETER o RETROCEDER la transacción para que el cambio sea permanente o deshacerlo. Tenga en cuenta que esta operación hará que se activen todos los desencadenadores DELETE de la mesa. El bloqueo de nivel de fila se agregará al eliminar.

De: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

Al final de la página puedes encontrar las crónicas de otros administradores, tú igualmente eres capaz dejar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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