Чому обрізається DDL?


15

У мене є питання про інтерв'ю, яке було задано під час мого інтерв'ю. Я відповів на запитання, але інтерв'юер не був так переконаний моєю відповіддю. Отже, будь-хто, будь ласка, виправте мене з моїм розумінням?

З. Чому Truncate - це DDL, де видалити - це DML? Обидва виконують майже однакову роботу (видаляючи рядки)

Відповідь Коли ми використовуємо Truncate, ми виділяємо весь простір, виділений даними, не зберігаючи в просторі скасування таблиці. Але, у випадку видалення, ми ставимо всі дані в скасувати простір таблиці, а потім видаляємо всі дані.

Будь ласка, якщо хтось знає найкращу відповідь на вищезазначене, будь ласка, поясніть.


Коментарі не для розширеного обговорення; ця розмова була переміщена до чату .
Пол Білий 9

Відповіді:


14

Відмінність DML від DDL не настільки чітка, як випливають з їхніх назв, тому інколи стає дещо каламутним.

Oracle чітко класифікується TRUNCATEяк DDL в Посібнику з концепцій, але DELETEяк DML.

Основні моменти, які ставляться TRUNCATEв таборі DDL на Oracle, наскільки я розумію, це:

  • TRUNCATEможуть змінювати параметри зберігання ( NEXTпараметр), і вони є частиною визначення об'єкта - це в таборі DDL.
  • TRUNCATEробить неявне commit, і його не можна повернути назад (відступ убік) - більшість (усіх?) операцій DDL в Oracle роблять це, жоден DML не робить.

Те, що TRUNCATEне запускає ON DELETEтригери, також відрізняє його від звичайних операцій DML (але деякі операції з DML прямого шляху також пропускають тригери, тому це не ясний показник).

Ця ж документація зазначає, що DELETEстворює UNDO, але TRUNCATEні, тому ваше твердження є правильним у цьому відношенні. (Зверніть увагу, що TRUNCATEвони генерують деякі, REDOщоб усічення можна було відтворити у разі відновлення / відновлення.) Але деякі NOLOGGINGоперації також можуть призвести до зменшення UNDO (не впевнений у жодному взагалі), тож це, на мій погляд, не є чітким показником.

Тож я б підсумував це як:

  • truncateне є "трансакційним" в тому сенсі, що він здійснює і не може бути відкатований назад, і може змінювати атрибути зберігання об'єктів. Тож це не звичайний DML - Oracle класифікує його як DDL.
  • delete - звичайний оператор DML.

Створюючи таблицю, ви можете вказати такі речі, як, у яку область таблиць вона входить, початковий розмір, наступний розмір ступеня тощо. Це атрибути зберігання. Так, вони є частиною метаданих таблиці (або індексу, або розділу).
Мат

Зауважте, що стандарт SQL містить перелік TRUNCATE у розділі "Маніпуляції з даними" разом із INSERT, DELETE та UPDATE.
a_horse_with_no_name

2

Я думаю , що truncateце схоже на drop, alter, createяк всі вони працюють на столі тобто всі вони є командами рівня таблиці. У той час як «Видалити» подібно insert, select, updateяк вся роботу над рядками , тобто всі вони є командами рівня рядка.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.