
ми не повинні зупинятися тут, є багато інших відмінностей між DELETE і TRUNCATE. Давайте обговоримо їх за допомогою діаграми порівняння, показаної нижче.
Діаграма порівняння
Основа для Comparsion | DELETE | TRUNCATE |
---|---|---|
Основний | Можна вказати кортеж, який потрібно видалити. | Вона видаляє всі кортежі з відношення. |
Мова | 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
- Основна відмінність між DELETE і TRUNCATE полягає в тому, що за допомогою DELETE можна видалити вказаний кортеж з відношення. Але використання TRUNCATE видалить цілі кортежі з відношення.
- DELETE - це команда DML, тоді як TRUNCATE - команда DDL.
- DELETE використовує пропозицію WHERE для фільтрації записів / кортежів, які потрібно видалити. Однак, TRUNCATE не вимагає пропозиції WHERE, оскільки вона видаляє всі кортежі, тому не потрібно фільтрувати кортежі.
- DELETE активує посилання на тригери, застосовані до таблиць. Але TRUNCATE не спрацьовує будь-які тригери на столі.
- Команда DELETE виключає кортежі один за одним з таблиці, в порядку їх обробки. Однак TRUNCATE не працює на кортежах один за одним. Замість цього TRUNCATE працює на сторінці даних, яка зберігає дані таблиці.
- DELETE придбає блокування на кортежі перед його видаленням, тоді як TRUNCATE придбає блокування на сторінці даних перед видаленням сторінки даних.
- TRUNCATE швидше порівняно з командою DELETE.
- DELETE записує журнал транзакцій для кожного кортежу, тоді як TRUNCATE записує журнал операцій для кожної сторінки даних.
- Після видалення даних за допомогою TRUNCATE воно ніколи не може бути відновлено, тоді як ви можете відновити дані, які ви видаляли за допомогою команди DELETE.
Висновок:
Якщо ви хочете налаштувати видалення записів з таблиці, ви можете використовувати команду DELETE. Якщо ви хочете очистити таблицю, тобто ви не хочете залишити дані в таблиці, скористайтеся командою TRUNCATE.