Warum wird DDL abgeschnitten?


15

Ich habe eine Interviewfrage, die während meines Interviews gestellt wurde. Ich beantwortete die Frage, aber der Interviewer war von meiner Antwort nicht so überzeugt. Also, bitte korrigiert mich jemand mit meinem Verständnis?

Frage: Warum ist "Kürzen" DDL? Wo ist "Löschen" DML? Beide erledigen fast den gleichen Job (Zeilen entfernen)

Ans. Bei Verwendung von Truncate wird die Zuweisung des gesamten von den Daten zugewiesenen Speicherplatzes aufgehoben, ohne dass eine Speicherung im Undo-Tabellenbereich erfolgt. Im Fall von Delete werden jedoch alle Daten in den Undo-Tabellenbereich verschoben und anschließend alle Daten gelöscht.

Bitte, wenn jemand die beste Antwort für das oben Genannte weiß, erkläre es bitte.


Kommentare sind nicht für eine längere Diskussion gedacht. Diese Unterhaltung wurde in den Chat verschoben .
Paul White setzt Monica wieder ein

Antworten:


14

Die Unterscheidung zwischen DML und DDL ist nicht so eindeutig, wie ihre Namen andeuten, sodass die Dinge manchmal etwas matschig werden.

Oracle wirdTRUNCATE im Concepts Guide eindeutig als DDL , aber DELETEals DML klassifiziert .

Die wichtigsten Punkte TRUNCATEim DDL-Camp für Oracle sind meines Erachtens:

  • TRUNCATESpeicherparameter (der NEXTParameter) ändern können , und diese sind Teil der Objektdefinition - das ist im DDL-Lager.
  • TRUNCATEist implizit commitund kann nicht rückgängig gemacht werden (Flashback beiseite) - die meisten (alle?) DDL-Vorgänge in Oracle tun dies, kein DML.

Die Tatsache, dass TRUNCATEkeine ON DELETETrigger ausgeführt werden, unterscheidet es auch von normalen DML-Vorgängen (einige Direktpfad-DML-Vorgänge überspringen jedoch auch Trigger, sodass dies kein eindeutiger Indikator ist).

DELETEDieselben Dokumentationsnotizen, die UNDO generieren, jedoch TRUNCATEnicht, sodass Ihre Aussage in dieser Hinsicht korrekt ist. (Beachten Sie, dass TRUNCATEeinige generiert REDOwerden, damit die Kürzung im Falle einer Wiederherstellung / Wiederherstellung erneut abgespielt werden kann.) Einige NOLOGGINGVorgänge können jedoch auch zu einem reduzierten UNDO führen (ich bin mir nicht sicher, ob es überhaupt eines gibt).

Also würde ich es wie folgt zusammenfassen:

  • truncateist nicht "transaktional" in dem Sinne, dass es festgeschrieben wird, nicht rückgängig gemacht werden kann und Objektspeicherattribute ändern kann. Es handelt sich also nicht um gewöhnliches DML - Oracle klassifiziert es als DDL.
  • delete ist eine gewöhnliche DML-Anweisung.

Wenn Sie eine Tabelle erstellen, können Sie festlegen, in welchem ​​Tabellenbereich sie sich befindet, in welcher Anfangsgröße, in welcher Größe des nächsten Extents usw. Dies sind Speicherattribute. Ja, sie sind Teil der Metadaten einer Tabelle (oder eines Index oder einer Partition).
Mat

Beachten Sie, dass der SQL-Standard TRUNCATE im Kapitel "Datenmanipulation" zusammen mit INSERT, DELETE und UPDATE auflistet.
a_horse_with_no_name

2

Ich denke , das truncateist ähnlich drop, alter, createwie sie alle Arbeiten auf einem Tisch dh sie alle Tisch Level - Befehle sind. Während ‚Löschen‘ ähnlich ist insert, select, updatewie die gesamte Arbeit auf einem Reihen , dh sie alle Zeilenebene Befehle sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.