SQL код скопирован в буфер обмена
EN PT FR

Урок 9.2: Операторы TRUNCATE и DROP TABLE

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

Оба относятся к языку определения данных (DDL), но решают разные задачи. TRUNCATE быстро очищает таблицу от всех строк, а DROP TABLE удаляет саму таблицу целиком вместе с ее структурой.

Что делает TRUNCATE

Оператор TRUNCATE удаляет все строки из таблицы, но сама таблица при этом остается.

После выполнения TRUNCATE:

  • структура таблицы сохраняется;
  • имена столбцов, типы данных и ограничения остаются;
  • таблица становится пустой;
  • во многих СУБД операция выполняется быстрее, чем массовый DELETE.

Синтаксис TRUNCATE

TRUNCATE TABLE table_name;

Пример TRUNCATE

TRUNCATE TABLE logs;

После этого таблица logs останется в базе данных, но все ее строки будут удалены.


Что делает DROP TABLE

Оператор DROP TABLE удаляет таблицу полностью.

После выполнения DROP TABLE:

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

Синтаксис DROP TABLE

DROP TABLE table_name;

Пример DROP TABLE

DROP TABLE old_reports;

После этого таблица old_reports будет полностью удалена из базы данных.


Чем TRUNCATE отличается от DROP TABLE

Хотя оба оператора удаляют данные, между ними есть принципиальная разница.

1. Что именно удаляется

  • TRUNCATE удаляет только строки.
  • DROP TABLE удаляет и строки, и саму таблицу.

2. Можно ли дальше использовать таблицу

  • После TRUNCATE таблица остается и в нее можно снова вставлять данные.
  • После DROP TABLE таблицы больше нет, и для дальнейшей работы ее нужно создавать заново.

3. Когда применять

  • TRUNCATE подходит, когда нужно быстро очистить таблицу, сохранив ее структуру.
  • DROP TABLE подходит, когда таблица больше не нужна совсем.

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

Новички часто сравнивают TRUNCATE с DELETE, потому что обе команды могут удалить данные из таблицы.

Главные различия такие:

  • DELETE можно использовать с WHERE, удаляя только часть строк;
  • TRUNCATE удаляет сразу все строки таблицы;
  • DELETE относится к DML, а TRUNCATE обычно относят к DDL;
  • TRUNCATE во многих СУБД работает быстрее при полной очистке таблицы;
  • поведение с журналированием, откатом и сбросом счетчиков идентификаторов зависит от конкретной СУБД.

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


На что стоит обращать внимание

При использовании TRUNCATE и DROP TABLE важно помнить несколько правил:

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

Ошибочное применение этих операторов может привести к потере данных или структуры таблицы.


Пример из практики

Представим, что у нас есть вспомогательная таблица daily_import, в которую каждый день загружаются промежуточные данные из внешней системы.

Если таблица используется постоянно, но перед новой загрузкой ее нужно полностью очищать, подойдет TRUNCATE:

TRUNCATE TABLE daily_import;

После этого структура таблицы сохранится, и в нее можно будет снова загрузить новые данные.

Если же таблица была создана только для разовой задачи и больше не нужна, можно удалить ее полностью:

DROP TABLE daily_import;

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


Ключевые выводы этого урока:

  • TRUNCATE удаляет все строки таблицы, но оставляет ее структуру.
  • DROP TABLE удаляет и данные, и саму таблицу.
  • TRUNCATE и DELETE решают похожие задачи, но работают по-разному.
  • Перед использованием важно понимать, нужно ли очистить таблицу или удалить ее полностью.
  • Поведение TRUNCATE и DROP TABLE может немного отличаться в разных СУБД.

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