В предыдущем уроке мы научились создавать таблицы с помощью CREATE TABLE. Но в реальной работе с базой данных важно не только создавать структуру, но и понимать, как очищать таблицы или полностью удалять их. Для этого в SQL используются операторы TRUNCATE и DROP TABLE.
Оба относятся к языку определения данных (DDL), но решают разные задачи. TRUNCATE быстро очищает таблицу от всех строк, а DROP TABLE удаляет саму таблицу целиком вместе с ее структурой.
TRUNCATEОператор TRUNCATE удаляет все строки из таблицы, но сама таблица при этом остается.
После выполнения TRUNCATE:
DELETE.TRUNCATETRUNCATE TABLE table_name;
TRUNCATETRUNCATE TABLE logs;
После этого таблица logs останется в базе данных, но все ее строки будут удалены.
DROP TABLEОператор DROP TABLE удаляет таблицу полностью.
После выполнения DROP TABLE:
DROP TABLEDROP TABLE table_name;
DROP TABLEDROP TABLE old_reports;
После этого таблица old_reports будет полностью удалена из базы данных.
TRUNCATE отличается от DROP TABLEХотя оба оператора удаляют данные, между ними есть принципиальная разница.
TRUNCATE удаляет только строки.DROP TABLE удаляет и строки, и саму таблицу.TRUNCATE таблица остается и в нее можно снова вставлять данные.DROP TABLE таблицы больше нет, и для дальнейшей работы ее нужно создавать заново.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 может немного отличаться в разных СУБД.В следующем уроке мы рассмотрим временные таблицы и поймем, в каких случаях удобно использовать их для промежуточных результатов.