Hvordan skille mellom avkorte & Slett i Oracle

Hvordan skille mellom avkorte & Slett i Oracle


Det er to måter å fjerne poster i Oracle. Det ene er å bruke "kill all" situasjon hvor TRUNCATE kommandoen helt tømmer databasen tabellen, og den andre er DELETE kommandoen, som kan filtrere potensielle poster og reversere handlingen i slike tilfeller som utilsiktet sletting. Den sikreste måten å demonstrere denne prosessen er å skape en test bord og prøve de potensielle kommandoene ut heller enn forsøk på en eksisterende database.

Bruksanvisning

SLETT

1 Lag en test bord og fylle den med data for å teste resultatet. Den innsatte data demonstrerer bruk av slette og avkorte uttalelse, som følger:

CREATE TABLE test (testdata VARCHAR2 (2));

Sett inn i test (testdata) VALUES ( 'AX');

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

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

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

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

Sett inn i test (testdata) VALUES ( 'BZ');

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

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

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

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

Sett inn i test (testdata) VALUES ( 'DY');

Sett inn i test (testdata) VALUES ( 'DZ');

BEGÅ;

SELECT * FROM test;

2 Slette flere rader med slettekommando, men ikke forplikte resultatet. Dette vil vise hvordan slette beskytter data mot utilsiktet sletting under normale omstendigheter. Slette kommandoen kjører fra kommandolinjen som følger:

SQL> Slett fra test WHERE testdata LIKE 'A%';

Dette vil slette alle radene er markert med "A" og la resten gjenstår.

Rollback resultatet og vise resultatene i tabellen slik:

SQL> ROLLBACK;

Dette vil reversere tidligere slette utsagn og tabellen skal nå være satt tilbake til sin opprinnelige tilstand. Dette er verifiserbar etter:

SQL> SELECT * FROM test;

3 Kjør DELETE kommandoen igjen, deretter "COMMIT," og "rollback" før du tester den ut som vist nedenfor:

SQL> Slett fra test WHERE testdata LIKE 'A%';

SQL> COMMIT;

SQL> ROLLBACK;

SQL> SELECT * FROM test;

Dette viser at Oracle "SLETT" statement har vært effektiv og ignorerte tilbakeføring uttalelse, på grunn av en "COMMIT" handling finner sted umiddelbart etterpå. Dette indikerer at alle radene som begynner med "A" i "testdata" feltet forsvinne fra databasen og kan ikke gjenopprettes med en "rollback" statement.

avkorte

4 Utfør et avkorte uttalelse på testbordet som følger:

SQL> avkorte TABELL test;

5 Rollback den forrige setningen som følger:

SQL> ROLLBACK;

6 Velg elementer fra testen tabellen som følger:

SQL> SELECT * FROM test;

Dette viser ingen elementer på bordet. Den "rollback" statement fungerer ikke på TRUNCATE kommando og alle radene i databasen forsvinne.

En annen stor forskjell fra "SLETT" er at "TRUNCATE" fungerer raskere, men er ikke i stand til å filtrere ut data ved hjelp av en "hvor" klausul (i motsetning DELETE).

Hint

  • Når en slette finner sted eller andre endringer på data, vil andre brukere i ulike økter bare være i stand til å se data i sin opprinnelige tilstand med mindre en "COMMIT" har funnet sted eller programmet er fullført.
  • Hvis det er sikkert at alle radene i en tabell må fjernes så TRUNCATE bør brukes, men hvis noen rader må holdes intakt det beste alternativet er å bruke en DELETE kommando og COMMIT når du er fornøyd med den potensielle resultatet.
  • Hvis "autocommit = ON" i oracle slette vil fjerne rader umiddelbart uten noen rollback data blir tilgjengelig. Autocommit må være "off" for tilbakeføring system for å gjenopprette data slettet ved et uhell.