В чем разница между TRUNCATE и DELETE в SQL - PullRequest
238 голосов
/ 26 сентября 2008

В чем разница между TRUNCATE и DELETE в SQL?

Если ваш ответ зависит от платформы, укажите это.

Ответы [ 31 ]

0 голосов
/ 19 апреля 2017

Еще одно отличие, характерное для Microsoft SQL Server, с delete вы можете использовать output оператор, чтобы отслеживать, какие записи были удалены, например:

delete from [SomeTable]
output deleted.Id, deleted.Name

Вы не можете сделать это с truncate.

0 голосов
/ 13 июня 2016

Оператор DELETE может иметь предложение WHERE для удаления определенных записей, тогда как оператор TRUNCATE не требует никаких и стирает всю таблицу. Важно, что оператор DELETE регистрирует удаленную дату, а оператор TRUNCATE - нет.

0 голосов
/ 26 сентября 2008

Короче говоря, truncate ничего не регистрирует (поэтому работает намного быстрее, но не может быть отменен), тогда как удаление регистрируется (и может быть частью более крупной транзакции, откат и т. Д.). Если у вас есть данные, которые вам не нужны, в таблице в dev, как правило, лучше их усекать, так как вы не рискуете заполнить журнал транзакций

0 голосов
/ 26 сентября 2008

Основная причина, по которой это удобно, - это когда вам нужно обновить данные в многомиллионной таблице строк, но не хотите перестраивать их. «Удалить *» будет длиться вечно, тогда как влияние Truncate на производительность будет незначительным.

0 голосов
/ 27 сентября 2008

Невозможно выполнить DDL через линию связи.

0 голосов
/ 27 сентября 2008

Я бы прокомментировал сообщение Матье, но у меня пока нет представителя ...

В MySQL автоматический счетчик приращений сбрасывается с усечением, но не с удалением.

0 голосов
/ 06 октября 2014

Выпуская инструкцию TRUNCATE TABLE, вы указываете SQL Server удалить каждую запись в таблице без ведения журналов или обработки транзакций.

0 голосов
/ 22 августа 2014

Усечение и удаление в SQL - это две команды, которые используются для удаления или удаления данных из таблицы. Хотя обе команды Sql довольно просты по своей природе, они могут создать массу проблем, пока вы не ознакомитесь с деталями перед их использованием. Неправильный выбор команды может привести либо к очень медленному процессу, либо к крушению сегмента журнала, если необходимо удалить слишком много данных и недостаточно сегмента журнала. Вот почему очень важно знать, когда использовать команды усечения и удаления в SQL, но прежде чем использовать их, вы должны знать о различиях между усечением и удалением, и, основываясь на них, мы должны быть в состоянии выяснить, когда удаление является лучшим вариантом для удаления data или TRUNCATE должны использоваться для очистки таблиц.

См. Проверку нажмите здесь

0 голосов
/ 27 сентября 2008

TRUNCATE быстрый, DELETE медленный.

Хотя TRUNCATE не несет ответственности.

0 голосов
/ 25 января 2014

Это не значит, что усечение ничего не регистрирует в SQL Server. truncate не регистрирует какую-либо информацию, но регистрирует освобождение страницы данных для таблицы, для которой вы запустили TRUNCATE.

и усеченная запись может быть откатом, если мы определим транзакцию в начале, и мы можем восстановить усеченную запись после отката. Но не удается восстановить усеченные записи из резервной копии журнала транзакций после совершенной усеченной транзакции.

...