Рекомендуємо, 2022

Вибір Редакції

Різниця між DELETE і TRUNCATE в SQL

DELETE і TRUNCATE - це команди, які використовуються для видалення кортежів з відношення, але вони відрізняються в багатьох контекстах. У SQL, команда DELETE є мовою мови маніпулювання даними, тоді як команда TRUNCATE - це команда мови визначення даних . Тим не менш, точка, яка дозволяє нам розрізняти DELETE і TRUNCATE полягає в тому, що DELETE здатна видаляти задані кортежі з відношення, в той час як команда TRUNCATE видаляє цілі кортежі з відношення.

ми не повинні зупинятися тут, є багато інших відмінностей між DELETE і TRUNCATE. Давайте обговоримо їх за допомогою діаграми порівняння, показаної нижче.

Діаграма порівняння

Основа для ComparsionDELETETRUNCATE
ОсновнийМожна вказати кортеж, який потрібно видалити.Вона видаляє всі кортежі з відношення.
МоваDELETE - команда мови маніпулювання даними.TRUNCATE - це команда Мова визначення даних.
WHEREКоманда DELETE може мати пропозицію WHERE.Команда TRUNCATE не має умови WHERE.
ТригерКоманда DELETE активує спусковий гачок, застосований до таблиці, і викликає їх.Команда TRUNCATE не активує тригери для запуску.
ВидаленняКоманда DELETE усуває кортежі один за одним.TRUNCATE видаляє всю сторінку даних, що містить кортежі.
БлокуванняКоманда DELETE блокує рядок / кортеж перед його видаленням.Команда TRUNCATE заблокує сторінку даних перед видаленням даних таблиці.
ШвидкістьКоманда DELETE працює повільніше, ніж TRUNCATE.TRUNCATE швидше, ніж DELETE.
ОпераціяDELETE записує журнал транзакцій для кожного видаленого кортежу.TRUNCATE записує журнал операцій для кожної сторінки видалених даних.
ВідновленняКоманда DELETE може слідувати або COMMIT, або ROLLBACK.Команда TRUNCATE не може бути ROLLBACK.

Визначення DELETE

DELETE - команда мови маніпулювання даними (DML). Завдання команди DELETE - видалити або видалити кортежі з таблиці або відношення. Використовуючи DELETE, ми можемо усунути весь кортеж, з усіма його значеннями атрибутів з відношення. DELETE не видаляє значення певного атрибута, кортежу з відношення.

Можна фільтрувати кортежі, які потрібно видалити з таблиці, за допомогою пункту WHERE . Якщо ви вкажете пропозицію WHERE у операторі DELETE, то вона буде видаляти лише кортежі, що задовольняють умові WHERE. Але якщо ви не вкажете пропозицію WHERE у операторі DELETE, то за замовчуванням вона видаляє або виключає всі кортежі з відношення. Вираз WHERE у операторі DELETE може містити вкладені оператори SELECT-FROM-WHERE .

Синтаксис команди DELETE є наступним:

DELETE FROM table_name WHERE [ умова ];

Команда DELETE діє тільки на одне відношення або таблицю одночасно. Якщо ви хочете видалити кортеж з різних відносин, ви повинні помістити різні команди DELETE для кожного. Але видалення кортежу з одного відношення може порушувати референційну цілісність бази даних, яка може бути вирішена за допомогою тригерів. Якщо команда DELETE порушує референційну цілісність, то активуються всі референційні тригери (якщо вказано), що поширює дію видалення на кортежі різного відношення, що відноситься до видалених кортежів.

Команда DELETE спочатку блокує рядок або кортеж для видалення, а потім видаляє кортеж один за одним . Отже, він вимагає більше замків і ресурсів, які роблять його більш повільним . Ви можете зробити зміни, зроблені за допомогою команди DELETE, постійними, використовуючи COMMIT, або ви можете скинути базу даних за допомогою ROLLBACK .

Визначення TRUNCATE

TRUNCATE схожа на команду DELETE, оскільки вона також видаляє кортежі з відношення. Різниця полягає в тому, що вона видаляє цілі кортежі з відношення. Коли команда TRUNCATE виконується, всі дані з таблиці видаляються, кожен кортеж разом з усіма його значеннями атрибутів вилучається з таблиці. Але структура таблиці все ще існує в базі даних. Отже, ви можете знову ввести кортежі в таблиці. TRUNCATE - це команда Мова визначення даних.

Синтаксис команди TRUNCATE є наступним:

ТАБЛИЦЯ TRUNCATE table_name ;

Подібно до DELETE, TRUNCATE не працює з табличними даними рядок за рядком. Замість цього він працює на сторінках даних, які зберігають дані таблиці. Тепер, коли TRUNCATE видаляє сторінки даних, він повинен придбати блокування на сторінках даних замість кортежів. Отже, це призводить до меншої вимоги до замків і ресурсів, що робить TRUNCATE швидше в порівнянні з DELETE.

Виконання команди TRUNCATE не активує будь-які тригери, оскільки вона не працює по рядках даних. TRUNCATE не може бути виконаний, якщо на таблицю посилається будь-який зовнішній ключ . Коли команда TRUNCATE видаляє дані таблиці, вона ніколи не може бути відновлена .

Ключові відмінності між DELETE і TRUNCATE в SQL

  1. Основна відмінність між DELETE і TRUNCATE полягає в тому, що за допомогою DELETE можна видалити вказаний кортеж з відношення. Але використання TRUNCATE видалить цілі кортежі з відношення.
  2. DELETE - це команда DML, тоді як TRUNCATE - команда DDL.
  3. DELETE використовує пропозицію WHERE для фільтрації записів / кортежів, які потрібно видалити. Однак, TRUNCATE не вимагає пропозиції WHERE, оскільки вона видаляє всі кортежі, тому не потрібно фільтрувати кортежі.
  4. DELETE активує посилання на тригери, застосовані до таблиць. Але TRUNCATE не спрацьовує будь-які тригери на столі.
  5. Команда DELETE виключає кортежі один за одним з таблиці, в порядку їх обробки. Однак TRUNCATE не працює на кортежах один за одним. Замість цього TRUNCATE працює на сторінці даних, яка зберігає дані таблиці.
  6. DELETE придбає блокування на кортежі перед його видаленням, тоді як TRUNCATE придбає блокування на сторінці даних перед видаленням сторінки даних.
  7. TRUNCATE швидше порівняно з командою DELETE.
  8. DELETE записує журнал транзакцій для кожного кортежу, тоді як TRUNCATE записує журнал операцій для кожної сторінки даних.
  9. Після видалення даних за допомогою TRUNCATE воно ніколи не може бути відновлено, тоді як ви можете відновити дані, які ви видаляли за допомогою команди DELETE.

Висновок:

Якщо ви хочете налаштувати видалення записів з таблиці, ви можете використовувати команду DELETE. Якщо ви хочете очистити таблицю, тобто ви не хочете залишити дані в таблиці, скористайтеся командою TRUNCATE.

Top