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.
Antworten:
Die Unterscheidung zwischen DML und DDL ist nicht so eindeutig, wie ihre Namen andeuten, sodass die Dinge manchmal etwas matschig werden.
Oracle wird
TRUNCATE
im Concepts Guide eindeutig als DDL , aberDELETE
als DML klassifiziert .Die wichtigsten Punkte
TRUNCATE
im DDL-Camp für Oracle sind meines Erachtens:TRUNCATE
Speicherparameter (derNEXT
Parameter) ändern können , und diese sind Teil der Objektdefinition - das ist im DDL-Lager.TRUNCATE
ist implizitcommit
und kann nicht rückgängig gemacht werden (Flashback beiseite) - die meisten (alle?) DDL-Vorgänge in Oracle tun dies, kein DML.Die Tatsache, dass
TRUNCATE
keineON DELETE
Trigger 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).DELETE
Dieselben Dokumentationsnotizen, die UNDO generieren, jedochTRUNCATE
nicht, sodass Ihre Aussage in dieser Hinsicht korrekt ist. (Beachten Sie, dassTRUNCATE
einige generiertREDO
werden, damit die Kürzung im Falle einer Wiederherstellung / Wiederherstellung erneut abgespielt werden kann.) EinigeNOLOGGING
Vorgä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:
truncate
ist 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.quelle
Ich denke , das
truncate
ist ähnlichdrop
,alter
,create
wie sie alle Arbeiten auf einem Tisch dh sie alle Tisch Level - Befehle sind. Während ‚Löschen‘ ähnlich istinsert
,select
,update
wie die gesamte Arbeit auf einem Reihen , dh sie alle Zeilenebene Befehle sind.quelle