SQL TRUNCATE TABLE
TRUNCATE TABLE в SQL: мгновенная очистка всех строк таблицы, сброс автоинкремента и отличие от DELETE — когда что применять.
TRUNCATE TABLE удаляет все строки таблицы за одно действие, сохраняя её структуру, столбцы, индексы и ограничения — как новая пустая таблица.
Синтаксис
TRUNCATE TABLE имя_таблицы;
Пример: очистка таблицы
Создадим таблицу с данными и очистим её:
CREATE TABLE orders_demo (
id INTEGER PRIMARY KEY,
item TEXT NOT NULL,
amount INTEGER
);
INSERT INTO orders_demo VALUES
(1, 'Яблоки', 5),
(2, 'Груши', 3),
(3, 'Сливы', 8);
-- Перед очисткой — посмотрим
SELECT COUNT(*) AS before_truncate FROM orders_demo;
-- Очищаем
DELETE FROM orders_demo; -- SQLite не поддерживает TRUNCATE, используем DELETE
-- После очистки
SELECT COUNT(*) AS after_truncate FROM orders_demo;
Результат:
+-----------------+ | before_truncate | +-----------------+ | 3 | +-----------------+ +----------------+ | after_truncate | +----------------+ | 0 | +----------------+
Примечание. В стандартном SQL и большинстве СУБД (PostgreSQL, MySQL, SQL Server, Oracle) команда —
TRUNCATE TABLE имя;. SQLite не реализуетTRUNCATE; вместо него используютDELETE FROM имя;— эффект тот же.
TRUNCATE TABLE vs DELETE
Критерий | TRUNCATE TABLE | DELETE (без WHERE) |
Скорость | Очень быстро — не логирует каждую строку | Медленнее — обрабатывает построчно |
Условие WHERE | Не поддерживается | Поддерживается |
AUTO_INCREMENT | Сбрасывается на начальное значение (обычно 1) | Не сбрасывается |
Откат (ROLLBACK) | В некоторых СУБД — нельзя откатить | Откатывается в транзакции |
Структура таблицы | Сохраняется | Сохраняется |
Триггеры | Обычно не срабатывают | Срабатывают |
Когда что выбирать
TRUNCATE TABLE — когда нужно полностью и быстро опустошить таблицу (например, сбросить тестовые данные или пересоздать кэш). DELETE — когда нужно удалить часть строк по условию или важно, чтобы сработали триггеры и транзакция была откатываемой.
Частые ошибки
- Писать
TRUNCATE TABLEсWHERE— этот оператор не поддерживает фильтры, он всегда удаляет все строки. - Не думать об AUTO_INCREMENT — после
TRUNCATEсчётчик сбрасывается, что может нарушить внешние ключи в других таблицах.
Коротко
TRUNCATE TABLEудаляет все строки мгновенно, сохраняя структуру таблицы.- Работает быстрее
DELETE, но не поддерживаетWHEREи сбрасываетAUTO_INCREMENT. - В SQLite вместо
TRUNCATEиспользуютDELETE FROMбез условия. - Выбирайте
TRUNCATEдля полной быстрой очистки,DELETE— для выборочного удаления.