TRUNCATE
не генерирует данные отката, что делает его молниеносным. Он просто освобождает страницы данных, используемые таблицей.
Однако, если вы находитесь в транзакции и хотите отменить «удаление» этого удаления, вам необходимо использовать DELETE FROM
, что дает возможность отката.
EDIT: Обратите внимание, что приведенное выше неверно для SQL Server (но оно применимо к Oracle). В SQL Server можно отменить операцию усечения, если вы находитесь внутри транзакции, и транзакция не была выполнена. С точки зрения SQL Server одно ключевое различие между DELETE FROM и TRUNCATE равно this: «Оператор DELETE удаляет строки по одному и записывает запись в журнал транзакций для каждой удаленной строки. TRUNCATE TABLE удаляет данные, освобождая данные страниц, используемых для хранения данных таблицы, и записывает только дезадаптации страниц в журнале транзакций ».
Другими словами, во время TRUNCATE регистрируется меньше записей, поскольку в журнале транзакций записываются только дезадаптации страниц, тогда как с DELETE FROM каждая запись строки записывается. Это одна из причин, по которой TRUNCATE молниеносно.
Обратите внимание также на эту ссылку MSDN, что вы не можете обрезать таблицы, на которые ссылаются ограничения внешнего ключа, участвовать в индексированном представлении или публиковать их с использованием репликации транзакций или репликации слиянием.
EDIT 2: Другим ключевым моментом является то, что TRUNCATE TABLE сбросит свою идентичность в исходных семенах, в то время как DELETE FROM будет вести приращением, откуда она была прервана. Справка: Бен Робинсон ответ.
'TRUNCATE' может также нарушить консистенцию (= не проверяет для внешних ключей, и не срабатывают триггеры) – nothrow
@Yossarian - Согласно MSDN: «Вы не можете использовать TRUNCATE TABLE в таблице, на которую ссылается ограничение FOREIGN KEY; вместо этого, используйте инструкцию DELETE без предложения WHERE ». http://msdn.microsoft.com/en-us/library/aa260621%28SQL.80%29.aspx – dcp
truncate can alos можно закатить. http: // sqlblog.com/blogs/denis_gobo/archive/2007/06/13/1458.aspx – Dhananjay