21. Чем TRUNCATE отличается от DELETE?

21. Чем TRUNCATE отличается от DELETE?

UNKNOWN

Delete в целом не предназначена для полной очистки таблицы - генерит редо, поддерживает индексы, то есть работает медленно.

Truncate наоборот предназначен именно для быстрой очистки ВСЕЙ таблицы или партиции - освобождает занятые экстенты.

  • Операция TRUNCATE не записывает в журнал событий удаление отдельных строк.

Вследствие чего не может активировать триггеры.

  • После операции TRUNCATE для некоторых СУБД (например, Oracle) следует неявная операция COMMIT. Поэтому удаленные в таблице записи нельзя восстановитьоперацией ROLLBACK. Но существуют и СУБД, в которых операция TRUNCATE можетучаствовать в транзакциях, например, PostgreSQL и Microsoft SQL Server.
  • Операция DELETE блокирует каждую строку, а TRUNCATE — всю таблицу.
  • Операция TRUNCATE не возвращает какого-то осмысленного значения (обычно возвращает 0) в отличие от DELETE, которая возвращает число удаленных строк.
  • Операция TRUNCATE в некоторых СУБД (например, MySQL или Microsoft SQL Server), сбрасывает значение счетчиков (для полей с AUTOINCREMENT / IDENTITY).

В PostgreSQL для сброса счётчиков необходимо указывать модификатор RESTART IDENTITY.

  • Операция TRUNCATE в некоторых СУБД (например, MySQL, PostgreSQL или Microsoft SQL Server) запрещена для таблиц, содержащих внешние ключи других таблиц. В PostgreSQL существует, однако, модификатор CASCADE, который разрешает TRUNCATE в этой ситуации – данные из зависимых таблиц удаляются в той же транзакции.
  • В SQLite операция как таковая отсутствует, но есть оптимизация операции DELETE, которая «значительно ускоряет её работу, если отсутствует аргумент WHERE».

Предыдущий вопрос: 20. Что такое индексы? Какие они бывают?

Следующий вопрос: 22. Что такое хранимые процедуры? Для чего они нужны?

Все вопросы по теме: список

Все темы: список

Вопросы/замечания/предложения/нашли ошибку: напишите мне

Report Page