Урок 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может немного отличаться в разных СУБД.
В следующем уроке мы рассмотрим временные таблицы и поймем, в каких случаях удобно использовать их для промежуточных результатов.