TRUNCATE
не генерирует никаких данных отката, что делает его молниеносным.Он просто освобождает страницы данных, используемые таблицей.
Однако, если вы находитесь в транзакции и хотите иметь возможность «отменить» это удаление, вам нужно использовать DELETE FROM
, что дает возможность отката.
РЕДАКТИРОВАТЬ: Обратите внимание, что вышеприведенное неверно для SQL Server (но это относится к Oracle).В SQL Server можно выполнить откат операции усечения, если вы находитесь внутри транзакции, и транзакция не была зафиксирована.С точки зрения SQL Server, одно ключевое отличие между DELETE FROM и TRUNCATE: this : "Оператор DELETE удаляет строки по одной за раз и записывает запись в журнале транзакций для каждой удаленной строки. TRUNCATE TABLE удаляетданные путем освобождения страниц данных, используемых для хранения данных таблицы, и записывают только освобождения страниц в журнале транзакций. "
Другими словами, во время TRUNCATE меньше регистрируется, потому что в освобождении записываются только освобождения страниц.журнал транзакций, в то время как с DELETE FROM удаление каждой строки записывается.Это одна из причин, по которой TRUNCATE работает молниеносно.
Обратите внимание, что по этой ссылке MSDN нельзя усекать таблицы, на которые ссылаются ограничения внешнего ключа, участвовать в индексированном представлении или опубликованы с использованием репликации транзакций или слияниярепликация.
РЕДАКТИРОВАТЬ 2: Другой ключевой момент заключается в том, что TRUNCATE TABLE сбрасывает вашу идентификацию в начальное начальное значение, тогда как DELETE FROM будет продолжать увеличиваться с того места, где оно было остановлено.Ссылка: ответ Бена Робинсона.