Чем отличаются delete, drop, truncate?
Разница между DELETE
, TRUNCATE
и DROP
заключается в том, что именно удаляется и как это происходит:
1️⃣ DELETE
DELETE
Удаляет строки из таблицы по условию (
WHERE
).Если
WHERE
не указано → удаляются все строки.Таблица и её структура сохраняются.
Можно откатить (
ROLLBACK
), если транзакция не зафиксирована.Срабатывают триггеры.
Пример:
DELETE FROM employees WHERE id = 10;
2️⃣ TRUNCATE
TRUNCATE
Удаляет все строки из таблицы.
Нельзя задать условие (
WHERE
недоступен).Работает быстрее, чем
DELETE
, т.к. не пишет построчно в лог.Обычно нельзя откатить (зависит от СУБД).
Сбрасывает счётчик автоинкремента (например,
id
).
Пример:
TRUNCATE TABLE employees;
3️⃣ DROP
DROP
Полностью удаляет таблицу (структуру + данные).
Восстановить можно только из бэкапа.
Удаляет все связанные объекты (индексы, ограничения).
Пример:
DROP TABLE employees;
Сравнение
Команда
Что удаляет
Условие WHERE
Возможность отката
Автоинкремент
Триггеры
DELETE
Данные (строки)
Да
Да (в транзакции)
Нет
Да
TRUNCATE
Все данные
Нет
Обычно нет
Сбрасывает
Нет
DROP
Таблицу (структуру+данные)
Нет
Нет
Нет таблицы
Нет
Last updated
Was this helpful?