Wie man unterscheidet zwischen Abschneiden & löschen in Oracle

November 16

Wie man unterscheidet zwischen Abschneiden & löschen in Oracle

Es gibt zwei Möglichkeiten zum Entfernen von Datensätzen in Oracle. Eine ist die "alle töten" Situation zu verwenden, wo durch Abschneiden des Befehls vollständig leert die Datenbanktabelle und der andere ist der DELETE-Befehl, der prospektiven Datensätze filtern und umkehren der Aktion in solchen Fällen als versehentliches Löschen kann. Der sicherste Weg zur Veranschaulichung dieses Prozesses ist eine Testtabelle erstellen und die potenziellen Befehle ausprobieren, anstatt auf einer vorhandenen Datenbank zu experimentieren.

Anweisungen

LÖSCHEN

1 Erstellen Sie eine Testtabelle und füllen sie mit Daten um das Ergebnis zu testen. Die eingefügten Daten veranschaulicht, die Löschung und die truncate-Anweisung wie folgt:

CREATE TABLE Test (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');

COMMIT;

Wählen Sie * aus Test;

2 Löschen Sie eine Anzahl von Zeilen, die mit dem Löschbefehl, aber nicht verpflichten Sie, das Ergebnis. Dies wird zeigen, wie Löschen schützt Daten vor versehentlichem Löschen unter normalen Umständen. Der Löschbefehl ausgeführt wird über die Befehlszeile wie folgt:

SQL > DELETE FROM Test wo Testdata wie 'A %';

Dies löscht alle Zeilen mit vorangestelltem "A" und lassen die restlichen verbleibenden.

Rollback das Ergebnis und Anzeige der Ergebnisse der Tabelle wie also:

SQL > ROLLBACK;

Dies wird die vorherige Delete-Anweisung rückgängig zu machen und die Tabelle sollte jetzt wieder in seinen ursprünglichen Zustand festgelegt werden. Dies ist überprüfbar durch:

SQL > Wählen Sie * aus Test;

3 Führen Sie den Löschbefehl wieder, dann "Begehen", und "ROLLBACK" vor der Prüfung der Ausgabe wie abgebildet:

SQL > DELETE FROM Test wo Testdata wie 'A %';

SQL > verpflichten;

SQL > ROLLBACK;

SQL > Wählen Sie * aus Test;

Dies zeigt, dass die Oracle-Anweisung "DELETE" und die Rollback-Anweisung durch eine "COMMIT" Aktion statt unmittelbar danach ignoriert wirksam wurde. Dies bedeutet, dass alle Zeilen beginnend mit "A" im Feld "Testdata" aus der Datenbank verschwinden und sind nicht erstattungsfähig, mit einem "ROLLBACK"-Anweisung.

ABSCHNEIDEN

4 Führen Sie eine truncate-Anweisung auf die Testtabelle wie folgt:

SQL > TRUNCATE TABLE Test;

5 Rollback der vorherigen Anweisung wie folgt:

SQL > ROLLBACK;

6 Wählen Sie Elemente aus der Testtabelle wie folgt:

SQL > Wählen Sie * aus Test;

Dies zeigt keine Elemente auf dem Tisch. Die Anweisung "ROLLBACK" funktioniert nicht auf Befehls abschneiden und alle Zeilen in der Datenbank verschwinden.

Ein weiterer wichtiger Unterschied gegenüber "Löschen" ist, die "TRUNCATE" arbeitet schneller, aber ist nicht in der Lage, Filtern von Daten mithilfe von eine "WHERE"-Klausel (im Gegensatz zu löschen).

Tipps & Warnungen

  • Wenn eine Delete Platz oder andere Änderungen der Daten stattfindet, werden anderen Benutzern in verschiedenen Sitzungen nur in der Lage, Daten in seinen ursprünglichen Zustand zu sehen, es sei denn, eine "COMMIT" stattgefunden hat oder das Programm abgeschlossen ist.
  • Wenn es gibt sollte Gewissheit, dass alles, was die Zeilen in einer Tabelle werden müssen dann TRUNCATE entfernt verwendet werden aber wenn einige Zeilen müssen die beste Option intakt gehalten werden ist die Verwendung einer DELETE-Befehl und begehen Wenn Sie Interessenten zufrieden sind.
  • Wenn "AUTOCOMMIT = ON" in Oracle Löschung entfernt Zeilen sofort ohne Rollback Daten zur Verfügung stehen. AUTOCOMMIT muss "aus" für das Rollback-System versehentlich gelöschte Daten wiederherstellen.