Come distinguere tra Tronca & Elimina in Oracle

August 26

Come distinguere tra Tronca & Elimina in Oracle


Ci sono due modi di rimozione di record in Oracle. Uno è quello di utilizzare la situazione "uccidere tutti", dove il comando TRUNCATE svuota completamente la tabella del database, e l'altro è il comando DELETE, in grado di filtrare i futuri dischi e invertire l'azione in questi casi, come la cancellazione accidentale. Il modo più sicuro per dimostrare questo processo è quello di creare una tabella di test e provare i comandi potenziali fuori piuttosto che esperimento su un database esistente.

istruzione

DELETE

1 Creare una tabella di test e compilarlo con i dati per verificare il risultato. I dati inseriti dimostra l'uso della cancellazione e la dichiarazione Tronca, come segue:

CREATE TABLE test (testdata VARCHAR2 (2));

INSERT INTO prova (testdata) VALORI ( 'AX');

INSERT INTO prova (testdata) VALORI ( 'AA');

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

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

INSERT INTO prova (testdata) VALORI ( 'con');

INSERT INTO prova (testdata) VALORI ( 'BZ');

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

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

INSERT INTO prova (testdata) VALORI ( 'CZ');

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

INSERT INTO prova (testdata) VALORI ( 'DY');

INSERT INTO prova (testdata) VALORI ( 'DZ');

COMMETTERE;

SELECT * FROM prova;

2 Eliminare un numero di righe utilizzando il comando di eliminazione, ma non commettere il risultato. Questo mostra come cancellare protegge i dati contro l'eliminazione accidentale in circostanze normali. Il comando delete viene eseguito dalla riga di comando come segue:

SQL> DELETE FROM WHERE prova testdata LIKE 'A%';

Questo cancellerà tutte le righe prefisso "A" e lasciare il resto rimanente.

Rollback il risultato e visualizzare i risultati della tabella in questo modo:

SQL> ROLLBACK;

Questo invertire la precedente istruzione DELETE e la tabella dovrebbe essere arretrato al suo stato originale. Questo è verificabile da:

SQL> SELECT * FROM prova;

3 Eseguire il comando DELETE di nuovo, poi "commit" e "ROLLBACK" prima di testare l'uscita come illustrato:

SQL> DELETE FROM WHERE prova testdata LIKE 'A%';

SQL> COMMIT;

SQL> ROLLBACK;

SQL> SELECT * FROM prova;

Questo dimostra che l'oracolo "CANCELLA" dichiarazione è stata efficace e ignorato la dichiarazione di rollback, a causa di una "commit" l'azione che si svolge subito dopo. Questo indica che tutte le righe che iniziano con "A" nel campo "testdata" scompaiono dal database e non sono ripetibili con un'istruzione "ROLLBACK".

TRONCARE

4 Eseguire una dichiarazione troncare al banco di prova come segue:

SQL> Test TRUNCATE TABLE;

5 Rollback l'istruzione precedente come segue:

SQL> ROLLBACK;

6 Selezionare le voci dalla tabella di prova come segue:

SQL> SELECT * FROM prova;

Questo dimostra articoli sul tavolo. L'affermazione "ROLLBACK" non funziona sul comando TRUNCATE e tutte le righe del database scomparire.

Un'altra grande differenza da "ELIMINA" è che "TRUNCATE" funziona più veloce, ma non è in grado di filtrare i dati utilizzando una clausola "WHERE" (a differenza DELETE).

Consigli e avvertenze

  • Quando una cancellazione è in atto o altre modifiche sui dati, altri utenti in diverse sessioni saranno in grado di vedere i dati nel suo stato originale a meno che un luogo "commit" ha preso o il programma completa.
  • Se non vi è certezza che tutte le righe di una tabella devono essere rimossi quindi TRUNCATE dovrebbe essere utilizzato, ma se alcune righe devono essere mantenuto intatto l'opzione migliore è quella di utilizzare un comando DELETE e COMMIT quando si è soddisfatti del risultato prospettico.
  • Se "AUTOCOMMIT = ON" all'interno di Oracle elimina rimuoverà le righe immediatamente senza essere disponibili tutti i dati di rollback. AUTOCOMMIT ha bisogno di essere "off" per il sistema di ripristino per recuperare i dati accidentalmente cancellati.