Dlaczego obcięty jest DDL?


15

Mam pytanie do wywiadu, zadane podczas mojego wywiadu. Odpowiedziałem na pytanie, ale moja osoba udzielająca wywiadu nie była tak przekonana. Więc, proszę, popraw mnie według mojego zrozumienia?

P: Dlaczego obcięcie jest DDL Gdzie jako DML jest DML? Oba wykonują prawie taką samą pracę (usuwanie wierszy)

Odp. Kiedy używamy Truncate, cofamy alokację całej przestrzeni przydzielonej przez dane bez zapisywania w cofniętym obszarze tabel. Ale w przypadku Delete umieszczamy wszystkie dane w cofnięciu obszaru tabel, a następnie usuwamy wszystkie dane.

Proszę, jeśli ktoś zna najlepszą odpowiedź na powyższe, proszę wyjaśnić.


Komentarze nie są przeznaczone do rozszerzonej dyskusji; ta rozmowa została przeniesiona do czatu .
Paul White 9

Odpowiedzi:


14

Rozróżnienie DML i DDL nie jest tak jasne, jak sugerują ich nazwy, więc czasami robi się trochę mętnie.

Oracle wyraźnie klasyfikuje się TRUNCATEjako DDL w Przewodniku pojęć, ale DELETEjako DML.

Głównymi punktami, jakie postawiłem TRUNCATEw obozie DDL na Oracle, jak rozumiem, są:

  • TRUNCATEmoże zmieniać parametry przechowywania ( NEXTparametr), a te są częścią definicji obiektu - to jest obóz DDL.
  • TRUNCATEma charakter niejawny commiti nie można go przywrócić (odsuń na bok) - większość (wszystkich?) operacji DDL w Oracle to robi, żaden DML tego nie robi.

Fakt, że TRUNCATEnie uruchamia ON DELETEwyzwalaczy, odróżnia go również od normalnych operacji DML (ale niektóre bezpośrednie operacje DML również pomijają wyzwalacze, więc nie jest to wyraźny wskaźnik).

Ta sama dokumentacja zauważa, że DELETEgeneruje UNDO, ale TRUNCATEnie robi, więc twoje stwierdzenie jest poprawne pod tym względem. (Zauważ, że TRUNCATEto generuje, REDOaby obcięcie można było odtworzyć w przypadku przywracania / odzyskiwania.) Ale niektóre NOLOGGINGoperacje mogą również powodować zmniejszenie UNDO (nie jestem pewien, czy nie ma żadnego), więc moim zdaniem nie jest to również wyraźny wskaźnik.

Podsumowałbym to jako:

  • truncatenie jest „transakcyjny” w tym sensie, że popełnia i nie można go wycofać, i może modyfikować atrybuty przechowywania obiektów. Więc to nie jest zwykły DML - Oracle klasyfikuje go jako DDL.
  • delete jest zwykłą instrukcją DML.

Podczas tworzenia tabeli można określić takie rzeczy, jak obszar tabel, w którym się znajduje, rozmiar początkowy, rozmiar następnego zasięgu itd. Są to atrybuty pamięci. Tak, są częścią metadanych tabeli (lub indeksu lub partycji).
Mat.

Zauważ, że standard SQL zawiera TRUNCATE w rozdziale „Manipulowanie danymi” wraz z INSERT, DELETE i UPDATE.
a_horse_w_no_name

2

Myślę, że truncatejest podobna do drop, alter, createponieważ wszystkie prace na stole czyli wszystkie są komendy poziomie tabeli. Natomiast „Usuń” jest podobna do insert, select, updateponieważ wszystkie prace na wierszach, czyli wszystkie są polecenia poziomu wiersza.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.