ubiquitour.com

Cómo diferenciar entre Truncate y Delete en Oracle

Hay dos formas de eliminación de registros en Oracle. Uno es utilizar la situación de "matar a todos", donde el comando TRUNCATE completamente vacía la tabla de base de datos, y el otro es el comando eliminar, que puede filtrar registros prospectivos y revertir la acción en casos como el borrado accidental. La manera más segura para demostrar que este proceso es crear una tabla de prueba y probar los futuros comandos en lugar de experimentar en una base de datos existente.

Instrucciones

ELIMINAR

1 Crear una tabla de prueba y rellenarlo con los datos para el resultado de la prueba. Los datos insertados muestra el uso de la cancelación y la declaración de truncado, como sigue:

Prueba de CREATE TABLE (testdata VARCHAR2(2));

INSERT INTO test(testdata)VALUES('AX');

INSERT INTO test(testdata)VALUES('AY');

INSERT INTO test(testdata)VALUES('AZ');

INSERT INTO test(testdata)VALUES('BX');

INSERT INTO test(testdata)VALUES('BY');

INSERT INTO test(testdata)VALUES('BZ');

INSERT INTO test(testdata)VALUES('CX');

INSERT INTO test(testdata)VALUES('CY');

INSERT INTO test(testdata)VALUES('CZ');

INSERT INTO test(testdata)VALUES('DX');

INSERT INTO test(testdata)VALUES('DY');

INSERT INTO test(testdata)VALUES('DZ');

COMETER;

Seleccione * de prueba;

2 Borrar un número de filas usando el comando delete, pero no cometas el resultado. Esto le mostrará cómo eliminar protege los datos contra borrado accidental en condiciones normales. El comando delete se ejecuta desde la línea de comandos como sigue:

SQL > DELETE FROM prueba donde testdata como 'A %';

Esto eliminar todas las filas con el prefijo "A" y dejar el resto que queda.

Deshacer el resultado y mostrar los resultados de la tabla así:

SQL > ROLLBACK;

Esto invertirá el declaración anterior de eliminar y el la tabla ahora volver a su estado original. Esto es verificable por:

SQL > seleccionar * de prueba;

3 Ejecute el comando DELETE otra vez, entonces "Cometer" y "ROLLBACK" antes de la salida de la prueba como se muestra:

SQL > DELETE FROM prueba donde testdata como 'A %';

SQL > COMMIT;

SQL > ROLLBACK;

SQL > seleccionar * de prueba;

Esto demuestra que la declaración de "Borrar" de Oracle ha sido eficaz y omite la instrucción rollback, debido a un "COMMIT" acción que tendrá lugar inmediatamente después. Esto indica que todas las filas comenzando con "A" en el campo "testdata" desaparecen de la base de datos y no son recuperables con un comando de "ROLLBACK".

TRUNCAR

4 Ejecutar una instrucción truncate de la tabla de prueba como sigue:

SQL > prueba de TRUNCATE TABLE;

5 Deshacer la declaración anterior como sigue:

SQL > ROLLBACK;

6 Seleccione los elementos de la tabla de prueba como sigue:

SQL > seleccionar * de prueba;

Esto demuestra no hay artículos sobre la mesa. La declaración de "ROLLBACK" no funciona en el comando TRUNCATE y desaparecen todas las filas en la base de datos.

Otra diferencia importante de "Eliminar" es "TRUNCATE" funciona más rápido pero no es capaz de filtrar los datos mediante una cláusula "WHERE" (a diferencia de borrar).

Consejos y advertencias

  • Cuando una cancelación es lugar u otras modificaciones en los datos, otros usuarios en diferentes sesiones sólo podrá ver los datos en su estado original, a menos que ha producido un "COMMIT" o el programa completa.
  • Si hay certeza que todas las filas de una tabla que deba ser retirado luego truncar puede usarse, pero si algunas filas deban conservarse intacto, la mejor opción es utilizar un DELETE comandan y COMETERÁN cuando estés satisfecho con el resultado anticipado.
  • Si "AUTOCOMMIT = ON" dentro de oracle delete elimina filas inmediatamente sin ningún dato de restauración disponibles. AUTOCOMMIT debe estar en "off" para que el sistema de restauración recuperar datos borrados accidentalmente.