Рекомендуем, 2020

Выбор редакции

Разница между DELETE и TRUNCATE в SQL

DELETE и TRUNCATE - это команды, используемые для удаления кортежей из отношения, но они различаются во многих контекстах. В SQL команда DELETE - это команда языка манипулирования данными, а команда TRUNCATE - это команда языка определения данных . Однако точка, которая позволяет нам различать DELETE и TRUNCATE, заключается в том, что DELETE может удалять указанные кортежи из отношения, тогда как команда TRUNCATE удаляет целые кортежи из отношения.

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

Сравнительная таблица

Основа для сравненияУДАЛЯТЬTRUNCATE
основнойВы можете указать кортеж, который хотите удалить.Удаляет все кортежи из отношения.
языкDELETE - это команда языка манипулирования данными.TRUNCATE - это команда языка определения данных.
ГДЕУ команды 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 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. УДАЛЕНИЕ получает блокировку кортежа перед его удалением, тогда как TRUNCATE получает блокировку страницы данных перед удалением страницы данных.
  7. TRUNCATE быстрее по сравнению с командой DELETE.
  8. DELETE запись журнала транзакций для каждого кортежа, тогда как TRUNCATE запись журнала транзакций для каждой страницы данных.
  9. После того как вы удалите данные с помощью TRUNCATE, они никогда не смогут быть восстановлены обратно, тогда как вы можете восстановить данные, которые вы удалили, с помощью команды DELETE.

Заключение:

Если вы хотите настроить удаление записей из таблицы, используйте команду DELETE. Если вы хотите очистить таблицу, т.е. не хотите оставлять какие-либо данные в таблице, используйте команду TRUNCATE.

Top