Truncate и delete в чем разница
Отличия TRUNCATE от DELETE в языке T-SQL
Приветствую всех на сайте Info-Comp.ru! Сегодня я расскажу Вам об отличиях, которые существуют между инструкциями TRUNCATE TABLE и DELETE в языке T-SQL, Вы узнаете, в каких случаях лучше использовать DELETE, а в каких предпочтительней TRUNCATE.
Для того чтобы удалить данные из таблицы в Microsoft SQL Server можно использовать несколько инструкций, в частности DELETE и TRUNCATE TABLE. Эти операторы похожи, так как их предназначение одно – это удаление строк из таблицы. В связи с этим у многих возникают вопросы, например – а в чем отличие TRUNCATE от DELETE? или Когда лучше использовать TRUNCATE, а когда DELETE? Подобные вопросы задают и на собеседованиях, ведь понимание различий между этими операторами помогает разработчикам SQL эффективно работать с данными, строить приложения и запросы.
Заметка! Сборник статей для изучения языка T-SQL и Microsoft SQL Server – в этом материале я собрал лучшие свои статьи по SQL Server и сгруппировал их по уровню подготовки.
Для начала давайте дадим короткое определение этим двум операторам.
Что такое DELETE?
DELETE – это SQL инструкция языка T-SQL, которая удаляет одну или несколько строк из таблицы или представления в Microsoft SQL Server, при этом эта операция всегда полностью регистрируется в журнале транзакций, т.е. каждая удаленная строка.
Что такое TRUNCATE TABLE?
TRUNCATE TABLE – это SQL инструкция языка T-SQL, которая удаляет все строки в таблице, не записывая в журнал транзакций удаление отдельных строк данных. TRUNCATE TABLE похожа на инструкцию DELETE без предложения WHERE, но она выполняется быстрее и требует меньше ресурсов.
Сравнительная таблица отличий TRUNCATE TABLE и DELETE
Теперь давайте сформируем сравнительную таблицу, в которой отразим все отличия и особенности работы TRUNCATE TABLE и DELETE в языке T-SQL.
DELETE | TRUNCATE TABLE |
DELETE – это оператор DML (Data Manipulation Language) | TRUNCATE TABLE – это оператор DDL (Data Definition Language); |
DELETE может удалить часть данных за счет использования WHERE | TRUNCATE TABLE удаляет все данные из таблицы, секцию WHERE использовать нельзя |
DELETE записывает в журнал транзакций удаление каждой строки | TRUNCATE TABLE удаляет все строки в таблице, не записывая при этом удаление отдельных строк данных в журнал транзакций |
Для DELETE требуется больший объем журнала транзакций | Для TRUNCATE TABLE требуется меньший объем журнала транзакций, за счет того, что она не заносит в журнал запись для каждой удаляемой строки |
DELETE выполняется медленнее | TRUNCATE TABLE выполняется быстрее также за счет меньшего использования журнала транзакций |
DELETE удаляет строки по одной за раз | TRUNCATE TABLE удаляет все строки в таблице путем освобождения страниц |
DELETE создает блокировку на каждую строку, которую требуется удалить из таблицы | TRUNCATE TABLE блокирует в целом таблицу и страницу, чтобы удалить все записи |
DELETE сохраняет счетчик идентификаторов и не сбрасывает его до начального значения | TRUNCATE TABLE сбрасывает счетчик идентификаторов до начального значения |
DELETE может активировать триггер | TRUNCATE TABLE не может активировать триггер, поскольку в данном случае в журнал не записываются удаление отдельных строк |
DELETE сохраняет статистику объекта и выделенное пространство | TRUNCATE TABLE освобождает все страницы данных таблицы, поэтому TRUNCATE удаляет всю статистику и выделенное пространство |
DELETE можно использовать, если таблица является частью индексированного представления | TRUNCATE TABLE нельзя использовать, если таблица является частью индексированного представления |
Чтобы использовать DELETE, необходимы соответствующие права на удаление данных | Чтобы использовать TRUNCATE TABLE, у Вас должны быть права на ALTER TABLE, т.е. на изменение таблицы |
Таким образом, проанализировав таблицу, Вы можете решить, в каком случае для Вас будет лучше использовать TRUNCATE TABLE, а в каком DELETE.
Самым очевидным здесь является то, что если Вам нужно удалить не все данные из таблицы, а только часть, т.е. по условию WHERE, то Вы можете использовать только DELETE.
А, например, если Вам приходится периодически очищать всю таблицу, и значения идентификаторов не важны, то вполне возможно предпочтительней будет использовать TRUNCATE TABLE, так как это будет быстрей, и ресурсов затрачиваться будет меньше.
Пример отличия в работе TRUNCATE TABLE от DELETE
Для примера давайте создадим таблицу со столбцом идентификаторов, затем добавим в нее данные и удалим их сначала инструкцией DELETE, а потом попробуем выполнить то же самое только инструкцией TRUNCATE TABLE (предварительно пересоздав таблицу).
Создание тестовой таблицы
Выполняем удаление с помощью DELETE
Выполняем удаление инструкцией TRUNCATE TABLE
Как видите, в первом случае счетчик не сбросился, и нумерация продолжилась, а во втором счетчик начался с самого начала.
Заметка! Для комплексного изучения языка SQL и T-SQL рекомендую посмотреть мои видеокурсы по T-SQL, в которых используется последовательная методика обучения специально для начинающих.
Разница между DELETE и TRUNCATE в SQL
мы не должны останавливаться на достигнутом, есть много других различий между DELETE и TRUNCATE. Давайте обсудим их с помощью сравнительной таблицы, показанной ниже.
Сравнительная таблица
Определение DELETE
Синтаксис команды DELETE следующий:
DELETE FROM table_name WHERE [ условие ];
Команда DELETE работает только с одним отношением или таблицей за раз. Если вы хотите удалить кортеж из разных отношений, вы должны поместить разные команды DELETE для каждого. Но удаление кортежа из одного отношения может нарушить ссылочную целостность базы данных, которая может быть решена с помощью триггеров. Если команда DELETE нарушает ссылочную целостность, то активируются все ссылочные триггеры (если указаны), которые распространяют действие удаления на кортежи другого отношения, которые относятся к удаленным кортежам.
Определение слова TRUNCATE
Синтаксис команды TRUNCATE следующий:
TRUNCATE TABLE table_name ;
Как и DELETE, TRUNCATE не работает с табличными данными построчно. Вместо этого он работает на страницах данных, которые хранят данные таблицы. Теперь, когда TRUNCATE удаляет страницы данных, он должен получить блокировку страниц данных вместо кортежей. Следовательно, это приводит к меньшему требованию блокировок и ресурсов, что делает TRUNCATE быстрее по сравнению с DELETE.
Ключевые различия между DELETE и TRUNCATE в SQL
Заключение:
Если вы хотите настроить удаление записей из таблицы, используйте команду DELETE. Если вы хотите очистить таблицу, т.е. не хотите оставлять какие-либо данные в таблице, используйте команду TRUNCATE.
Топ-65 вопросов по SQL с собеседований, к которым вы должны подготовиться в 2019 году. Часть I
Перевод статьи подготовлен для студентов курса «MS SQL Server разработчик»
Реляционные базы данных являются одними из наиболее часто используемых баз данных по сей день, и поэтому навыки работы с SQL для большинства должностей являются обязательными. В этой статье с вопросами по SQL с собеседований я познакомлю вас с наиболее часто задаваемыми вопросами по SQL (Structured Query Language — язык структурированных запросов). Эта статья является идеальным руководством для изучения всех концепций, связанных с SQL, Oracle, MS SQL Server и базой данных MySQL.
Наша статья с вопросами по SQL — универсальный ресурс, с помощью которого вы можете ускорить подготовку к собеседованию. Она состоит из набора из 65 самых распространенных вопросов, которые интервьюер может задать во время собеседования. Оно обычно начинается с базовых вопросов по SQL, а затем переходит к более сложным на основе обсуждения и ваших ответов. Эти вопросы по SQL с собеседований помогут вам извлечь максимальную выгоду на различных уровнях понимания.
Давайте начнем!
Вопросы по SQL с собеседований
Вопрос 1. В чем разница между операторами DELETE и TRUNCATE?
DELETE | TRUNCATE |
---|---|
Используется для удаления строки в таблице | Используется для удаления всех строк из таблицы |
Вы можете восстановить данные после удаления | Вы не можете восстановить данные (прим. перевод.: операции логируются по разному, но в SQL Server есть возможность сделать откат) транзакции) |
DML-команда | DDL-команда |
Медленнее, чем оператор TRUNCATE | Быстрее |
№ Вопрос 2. Из каких подмножеств состоит SQL?
Вопрос 3. Что подразумевается под СУБД? Какие существуют типы СУБД?
База данных — структурированная коллекция данных. Система управления базами данных (СУБД) — программное обеспечение, которое взаимодействует с пользователем, приложениями и самой базой данных для сбора и анализа данных. СУБД позволяет пользователю взаимодействовать с базой данных. Данные, хранящиеся в базе данных, могут быть изменены, извлечены и удалены. Они могут быть любых типов, таких как строки, числа, изображения и т. д.
Существует два типа СУБД:
Вопрос 4. Что подразумевается под таблицей и полем в SQL?
Таблица — организованный набор данных в виде строк и столбцов. Поле — это столбцы в таблице. Например:
Таблица: Student_Information
Поле: Stu_Id, Stu_Name, Stu_Marks
Вопрос 5. Что такое соединения в SQL?
Для соединения строк из двух или более таблиц на основе связанного между ними столбца используется оператор JOIN. Он используется для объединения двух таблиц или получения данных оттуда. В SQL есть 4 типа соединения, а именно:
Вопрос 6. В чем разница между типом данных CHAR и VARCHAR в SQL?
И Char, и Varchar служат символьными типами данных, но varchar используется для строк символов переменной длины, тогда как Char используется для строк фиксированной длины. Например, char(10) может хранить только 10 символов и не сможет хранить строку любой другой длины, тогда как varchar(10) может хранить строку любой длины до 10, т.е. например 6, 8 или 2.
Вопрос 7. Что такое первичный ключ (Primary key)?
_Пример: в таблице Student StuID является первичным ключом.
Вопрос 8. Что такое ограничения (Constraints)?
Ограничения (constraints) используются для указания ограничения на тип данных таблицы. Они могут быть указаны при создании или изменении таблицы. Пример ограничений:
Вопрос 9. В чем разница между SQL и MySQL?
SQL — стандартный язык структурированных запросов (Structured Query Language) на основе английского языка, тогда как MySQL — система управления базами данных. SQL — язык реляционной базы данных, который используется для доступа и управления данными, MySQL — реляционная СУБД (система управления базами данных), также как и SQL Server, Informix и т. д.
Вопрос 10. Что такое уникальный ключ (Unique key)?
Вопрос 11. Что такое внешний ключ (Foreign key)?
Вопрос 12. Что подразумевается под целостностью данных?
Целостность данных определяет точность, а также согласованность данных, хранящихся в базе данных. Она также определяет ограничения целостности для обеспечения соблюдения бизнес-правил для данных, когда они вводятся в приложение или базу данных.
Вопрос 13. В чем разница между кластеризованным и некластеризованным индексами в SQL?
Вопрос 14. Напишите SQL-запрос для отображения текущей даты.
В SQL есть встроенная функция GetDate (), которая помогает возвращать текущий timestamp/дату.
Вопрос 15. Перечислите типы соединений
Существуют различные типы соединений, которые используются для извлечения данных между таблицами. Принципиально они делятся на четыре типа, а именно:
Inner join (Внутреннее соединение): в MySQL является наиболее распространенным типом. Оно используется для возврата всех строк из нескольких таблиц, для которых выполняется условие соединения.
Left Join (Левое соединение): в MySQL используется для возврата всех строк из левой (первой) таблицы и только совпадающих строк из правой (второй) таблицы, для которых выполняется условие соединения.
Right Join (Правое соединение): в MySQL используется для возврата всех строк из правой (второй) таблицы и только совпадающих строк из левой (первой) таблицы, для которых выполняется условие соединения.
Full Join (Полное соединение): возвращает все записи, для которых есть совпадение в любой из таблиц. Следовательно, он возвращает все строки из левой таблицы и все строки из правой таблицы.
Вопрос 16. Что вы подразумеваете под денормализацией?
Денормализация — техника, которая используется для преобразования из высших к низшим нормальным формам. Она помогает разработчикам баз данных повысить производительность всей инфраструктуры, поскольку вносит избыточность в таблицу. Она добавляет избыточные данные в таблицу, учитывая частые запросы к базе данных, которые объединяют данные из разных таблиц в одну таблицу.
Вопрос 17. Что такое сущности и отношения?
Сущности: человек, место или объект в реальном мире, данные о которых могут храниться в базе данных. В таблицах хранятся данные, которые представляют один тип сущности. Например — база данных банка имеет таблицу клиентов для хранения информации о клиентах. Таблица клиентов хранит эту информацию в виде набора атрибутов (столбцы в таблице) для каждого клиента.
Отношения: отношения или связи между сущностями, которые имеют какое-то отношение друг к другу. Например — имя клиента связано с номером учетной записи клиента и контактной информацией, которая может быть в той же таблице. Также могут быть отношения между отдельными таблицами (например, клиент к счетам).
Вопрос 18. Что такое индекс?
Индексы относятся к методу настройки производительности, позволяющему быстрее извлекать записи из таблицы. Индекс создает отдельную структуру для индексируемого поля и, следовательно, позволяет быстрее получать данные.
Вопрос 19. Опишите различные типы индексов.
Есть три типа индексов, а именно:
Вопрос 20. Что такое нормализация и каковы ее преимущества?
Нормализация — процесс организации данных, цель которого избежать дублирования и избыточности. Некоторые из преимуществ:
Вопрос 21. В чем разница между командами DROP и TRUNCATE?
Команда DROP удаляет саму таблицу, и нельзя сделать Rollback команды, тогда как команда TRUNCATE удаляет все строки из таблицы (прим. перевод.: в SQL Server Rollback нормально отработает и откатит DROP).
Вопрос 22. Объясните различные типы нормализации.
Существует много последовательных уровней нормализации. Это так называемые нормальные формы. Каждая последующая нормальная форма включает предыдущую. Первых трех нормальных форм обычно достаточно.
Вопрос 23. Что такое свойство ACID в базе данных?
ACID означает атомарность (Atomicity), согласованность (Consistency), изолированность (Isolation), долговечность (Durability). Он используется для обеспечения надежной обработки транзакций данных в системе базы данных.
Атомарность. Гарантирует, что транзакция будет полностью выполнена или потерпит неудачу, где транзакция представляет одну логическую операцию данных. Это означает, что при сбое одной части любой транзакции происходит сбой всей транзакции и состояние базы данных остается неизменным.
Согласованность. Гарантирует, что данные должны соответствовать всем правилам валидации. Проще говоря, вы можете сказать, что ваша транзакция никогда не оставит вашу базу данных в недопустимом состоянии.
Изолированность. Основной целью изолированности является контроль механизма параллельного изменения данных.
Долговечность. Долговечность подразумевает, что если транзакция была подтверждена (COMMIT), произошедшие в рамках транзакции изменения сохранятся независимо от того, что может встать у них на пути (например, потеря питания, сбой или ошибки любого рода).
Вопрос 24. Что вы подразумеваете под «триггером» в SQL?
Триггер в SQL — особый тип хранимых процедур, которые предназначены для автоматического выполнения в момент или после изменения данных. Это позволяет вам выполнить пакет кода, когда вставка, обновление или любой другой запрос выполняется к определенной таблице.
Вопрос 25. Какие операторы доступны в SQL?
В SQL доступно три типа оператора, а именно:
Вопрос 26. Совпадают ли значения NULL со значениями нуля или пробела?
Значение NULL вовсе не равно нулю или пробелу. Значение NULL представляет значение, которое недоступно, неизвестно, присвоено или неприменимо, тогда как ноль — это число, а пробел — символ.
Вопрос 27. В чем разница между перекрестным (cross join) и естественным (natural join) соединением?
Перекрестное соединение создает перекрестное или декартово произведение двух таблиц, тогда как естественное соединение основано на всех столбцах, имеющих одинаковое имя и типы данных в обеих таблицах.
Вопрос 28. Что такое подзапрос в SQL?
Подзапрос — это запрос внутри другого запроса, в котором определен запрос для извлечения данных или информации из базы данных. В подзапросе внешний запрос называется основным запросом, тогда как внутренний запрос называется подзапросом. Подзапросы всегда выполняются первыми, а результат подзапроса передается в основной запрос. Он может быть вложен в SELECT, UPDATE или любой другой запрос. Подзапрос также может использовать любые операторы сравнения, такие как >, SELECT * FROM table1
SELECT COUNT(*) FROM table1
SELECT rows FROM sysindexes WHERE AND indid
Ещё 35 вопросов с ответами опубликуем в следующей части… Следите за новостями!
Как очистить таблицу в MySQL
В статье мы расскажем, как в MySQL очистить таблицу. Мы покажем два способа и объясним разницу между ними.
Очистить таблицу можно при помощи одной из команд:
Разница между TRUNCATE и DELETE
Команда TRUNCATE является оператором DDL. DDL (Data Definition Language) — это язык определения данных. Операторы языка DDL управляют объектами баз данных: удаляют, создают или переименовывают объекты БД.
Команда DELETE является DML-оператором. DML (Data Manipulation Language) — это язык манипуляции данными. Операторы языка DML позволяют вставить, удалить, изменить, извлечь или обновить данные в базе.
Сравним работу команд:
TRUNCATE | DELETE |
---|---|
Удаляет все данные из таблицы | Может удалить часть данных в соответствии с условием WHERE |
Удаляет все строки из таблицы освобождением страниц | Удаляет строки по одной |
Записывает в журнал транзакций сведения о каждой удалённой странице, а не строке | Делает запись в журнал транзакций при удалении каждой строки |
Работает быстрее | Работает медленнее |
Нужны привилегии ALTER | Нужны привилегии DELETE |
Сбрасывает идентификаторы | Не сбрасывает идентификаторы |
Блокирует таблицу и страницу перед удалением | Блокирует строку перед её удалением |
Выбор команды зависит от конкретного случая. Если нужно удалить некоторые строки по условию, подойдёт только DELETE. Если нужно полностью очистить таблицу и сбросить идентификаторы, используйте TRUNCATE.
Понять разницу между командами и определиться с их выбором поможет таблица с операторами каждого языка:
DDL | DML |
---|---|
CREATE | SELECT |
ALTER | INSERT |
DROP | UPDATE |
TRUNCATE | DELETE |
COMMENT | MERGE |
RENAME | CALL |
EXPLAIN PLAN | |
LOCK TABLE |
Таким образом, операторы DDL управляют структурой, а операторы DML — её содержимым.
Как в MySQL очистить таблицу
Подключитесь к серверу по SSH. Затем подключитесь к MySQL при помощи команды:
Вместо username введите имя пользователя, вместо password — пароль.
Если вы не знаете пароль, попробуйте войти без него при помощи команды:
Если подключение без пароля не настроено, возникнет ошибка:
В этом случае сбросьте пароль от root-пользователя MySQL по инструкции.
TRUNCATE
TRUNCATE полностью очищает таблицу без возможности указать дополнительные условия. Для этого:
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:
TRUNCATE позволяет указать название БД и название таблицы в одном запросе. Для этого используйте команду:
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу.
DELETE
Выберите базу данных, в которой находится таблица, которую вы хотите очистить:
Вместо db_name введите имя базы данных.
Очистите таблицу при помощи команды:
Вы можете указать название БД и таблицы в одном запросе:
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Готово, вы очистили таблицу при помощи DELETE.
DELETE позволяет использовать условие WHERE, чтобы удалить некоторые строки из таблицы:
DELETE FROM table_name WHERE condition;
Где condition — это условие.
Пример команды, в котором будут удалены все строки, значение столбца, id которых больше 1000:
DELETE FROM table_name WHERE id > 1000;
Как проверить содержимое таблицы
Если вы хотите убедиться, что в таблице не осталось данных, воспользуйтесь командой:
Вместо db_name введите имя базы данных, а вместо table_name введите имя таблицы.
Если таблица пустая, вывод будет следующим:
В чем разница между TRUNCATE и DELETE в SQL
Edit: если ваш ответ специфичен для платформы, вы можете указать это.
30 ответов
вот список различий. Я выделил специфические для Oracle функции, и, надеюсь, сообщество также может добавить конкретную разницу других поставщиков. Различия, общие для большинства поставщиков, могут находиться непосредственно под заголовками, при этом различия выделены ниже.
Общие Сведения
Если вы хотите быстро удалить все строки из таблицы, и вы действительно уверены, что хотите это сделать, и у вас нет внешних ключей против таблиц, то усечение, вероятно, будет быстрее, чем удаление.
различные системные проблемы должны быть рассмотрены, как подробно описано ниже.
заявление типа
фиксация и откат
переменная по поставщику
SQL * Server
усечение можно свернуть спина.
PostgreSQL
усечение можно откатить.
Oracle
поскольку усечение является DDL, оно включает в себя два коммита, один до и один после выполнения оператора. Поэтому Truncate нельзя откатить, и сбой в процессе усечения все равно выдаст фиксацию.
однако, см. Flashback ниже.
космос мелиорация
Delete не восстанавливает пространство, усечение восстанавливает пространство
Oracle
Если вы используете предложение REUSE STORAGE, сегменты данных не освобождаются, что может быть несколько более эффективным, если таблица должна быть перезагружена данными. Отметка прилива сбрасывается.
область строку
Delete можно использовать для удаления всех строк или только подмножества строк. Инструкция truncate удаляет все строки.
Oracle
когда таблица секционирована, отдельные разделы могут быть усечены изолированно, таким образом, возможно частичное удаление всех данных таблицы.
типы объектов
Delete можно применить к таблицам и таблицам внутри кластера. Усечение применяется только к таблицам или ко всему кластеру. (Может быть специфичным для Oracle)
Oracle
Delete не влияет на идентификатор объекта данных, но truncate назначает новый идентификатор объекта данных если никогда не было вставки против таблицы с момента ее создания, даже одна вставка, которая откатывается, приведет к назначению нового идентификатора объекта данных при усечении.
Flashback (Oracle)
Flashback работает через удаления, но усечение предотвращает flashback к государства до операции.
однако из 11gR2 функция архивирования FLASHBACK позволяет это, за исключением Express Edition
льготы
Oracle
Delete может быть предоставлен в таблице другому пользователю или роль, но усечение не может быть без использования DROP любого табличного гранта.
Повтор/Отменить
Delete генерирует небольшое количество повтора и большое количество отмены. Truncate генерирует незначительное количество каждого.
индексы
Oracle
внешняя Ключи!—8—>
усечение не может быть применено, когда включенный внешний ключ ссылается на таблицу. Обработка delete зависит от конфигурации внешних ключей.
Таблица Замок
Oracle
усечение требует исключительной блокировки таблицы, удаление требует общей блокировки таблицы. Следовательно, отключение блокировок таблиц-это способ предотвращения операций усечения на таблица.
триггеры
триггеры DML не срабатывают при усечении.
Oracle
триггеры DDL доступны.
Удаленное Выполнение
Oracle
усечение не может быть выдано по ссылке базы данных.
личность Колонки
SQL * Server
результирующий набор
в большинстве реализаций a DELETE оператор может вернуть клиенту строки, которые были удалены.
например, в подпрограмме Oracle PL / SQL вы можете:
разница между усечением и удалением указана ниже:
команда DROP удаляет таблицу из базы данных. Все строки, индексы и привилегии таблиц также будут удалены. Триггеры DML не будут запущены. Откат операции невозможен.
усечь
TRUNCATE удаляет все строки из таблицы. Операция не может быть откат и никакие триггеры не будут запущены. Таким образом, TRUCATE быстрее и не использует столько пространства отмены, сколько удаления.
удалить
команда DELETE используется для удаления строк из таблицы. Предложение WHERE может использоваться только для удаления некоторых строк. Если условие WHERE не указано, все строки будут удалены. После выполнения операции удаления необходимо зафиксировать или откатить транзакцию, чтобы сделать изменение постоянным или отменить его. Обратите внимание, что эта операция вызовет срабатывание всех триггеров удаления в таблице.
все хорошие ответы, к которым я должен добавить:
С TRUNCATE TABLE является DDL (Язык Дефинации Данных), а не DML (Манипуляция Данными Langauge команды), то Delete Triggers не работают.
с SQL Server или MySQL, если есть ПК с автоматическим приращением, truncate сбросит счетчик.
» усечение ничего не регистрирует » правильно. Я бы пошел дальше:
усечение не выполняется в контексте транзакции.
преимущество скорости усечения над удалением должно быть очевидным. Это преимущество варьируется от тривиального до огромного, в зависимости от вашей ситуации.
однако я видел, как усечение непреднамеренно нарушает ссылочную целостность и нарушает другие ограничения. Сила, которую вы получаете, изменяя данные вне транзакции, имеет быть сбалансированным с ответственностью, которую вы наследуете, когда идете по канату без сети.
сводка Delete Vs Truncate в SQL server
Для полной статьи перейдите по этой ссылке : http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/
да, удаление медленнее, усечение быстрее. Почему?
DELETE должен прочитать записи, проверить ограничения, обновить блок, обновить индексы и создать повтор / отменить. Все это требует времени.
усечение просто настраивает указатель в базе данных для таблицы (высокая отметка воды) и пуф! данные исчезли.
Это специфический Oracle, AFAIK.
Если случайно вы удалили все данные из таблицы с помощью Delete / Truncate. Можно откатить зафиксированную транзакцию. Восстановите последнюю резервную копию и запустите журнал транзакций до момента, когда произойдет удаление/усечение.
соответствующая информация ниже находится от блоге:
при работе с базой данных мы используем Delete и Truncate без зная разницу между ними. В этой статье мы обсудим разница между Delete и Truncate в Sql.
Примечание: удаление и усечение обоих можно откатить при использовании с Торговая операция. Если сделка совершена, значит совершена, то мы не можем команда rollback Truncate, но мы все еще можем команду Rollback Delete из файлов журнала, Как удалить запись записывает их в файл журнала в случае, если это требуется откат в будущем из файлов журнала.
Если у вас есть ограничение внешнего ключа ссылающегося на таблицу вы пытаюсь усечение, это не будет работать, даже если ссылочная таблица не имеет данные в нем. Это связано с тем, что проверка внешнего ключа выполняется с помощью DDL а не ДМЛ. Это можно обойти, временно отключив ограничение (ограничения) внешнего ключа для таблицы.
Delete table-это регистрируемая операция. Таким образом, удаление каждой строки получает записываются в журнал транзакций, что делает его медленным. инструкция TRUNCATE table также удаляет все строки в таблице, но не регистрирует удаление вместо каждой строки он регистрирует освобождение страниц данных стол, что делает его быстрее.
Если случайно вы удалили все данные из таблицы, используя Удалить / Усечь. Можно откатить зафиксированную транзакцию. Восстановить последнее резервное копирование и запуск журнала транзакций до момента удаления / усечения вот-вот произойдет.
TRUNCATE является оператором DDL, тогда как DELETE является оператором DML. Ниже приведены различия между ними:
As TRUNCATE является DDL (язык определения данных) заявление, она не требует фиксации, чтобы сделать изменения постоянными. И именно по этой причине строки, удаленные truncate, не могут быть откатаны. С другой стороны!—1—> является DML (язык манипулирования данными) оператор, следовательно, требует явной фиксации чтобы сделать эффект постоянным.
TRUNCATE всегда удаляет все строки из таблицы, оставляя таблицу пустой и структуру таблицы неповрежденной, тогда как DELETE может удалить условно, если используется предложение where.
строки удалены TRUNCATE TABLE оператор не может быть восстановлен, и вы не можете указать предложение where в TRUNCATE заявление.
TRUNCATE операторы не запускают триггеры в отличие от на Удалить триггер на DELETE сообщении
усечь
удалить
Примечание: DELETE и TRUNCATE оба могут быть откатаны, когда окружены TRANSACTION если текущая сессия не закрыта. Если TRUNCATE написано в Редакторе запросов в окружении TRANSACTION и если сеанс закрыт, его нельзя откатить, но DELETE можно откатить назад.
в SQL Server 2005 я считаю, что вы can откат усечения
удалить
команда DELETE используется для удаления строк из таблицы. Предложение WHERE может использоваться только для удаления некоторых строк. Если условие WHERE не указано, все строки будут удалены. После выполнения операции удаления необходимо зафиксировать или откатить транзакцию, чтобы сделать изменение постоянным или отменить его. Обратите внимание, что эта операция вызовет срабатывание всех триггеров удаления в таблице.
усечь
усечение удаляет все строки из таблицы. Операция не может быть откат и никакие триггеры не будут запущены. Таким образом, TRUCATE быстрее и не использует столько пространства отмены, сколько удаления.
команда DROP удаляет таблицу из базы данных. Все строки, индексы и привилегии таблиц также будут удалены. Триггеры DML не будут запущены. Откат операции невозможен.
DROP и TRUNCATE-это команды DDL, тогда как DELETE-это команда DML. Поэтому операции удаления можно откатить (отменить), а операции удаления и усечения нельзя откатить.
небольшая поправка к исходному ответу-delete также генерирует значительное количество повторов (поскольку undo сам защищен повтором). Это видно из вывода autotrace:
усечение можно откатить, если обернуть транзакцию.
пожалуйста, посмотрите две ссылки ниже, и проверьте себя:-
усечение против удаления является одним из печально известные вопросы во время интервью SQL. Просто убедитесь, что вы правильно объясните интервьюеру, или это может стоить вам работы. Проблема в том, что не многие знают, поэтому, скорее всего, они сочтут ответ неправильным, если вы скажете им, что да усечение может быть откат.
самая большая разница заключается в том, что усечение не регистрируется, а удаление.
просто это означает, что в случае сбоя базы данных вы не можете восстановить данные, управляемые truncate, но с delete вы можете.
более подробная информация здесь
инструкция DELETE: эта команда удаляет только строки из таблицы на основе условия, указанного в предложении where, или удаляет все строки из таблицы, если условие не указано. Но это не освобождает пространство, содержащее таблицу.
синтаксис инструкции SQL DELETE:
удалить из table_name [где условие];
инструкция TRUNCATE: эта команда используется для удаления всех строк из таблицы и освобождения пространства, содержащего таблица.
удалить
усечь
для получения более подробной информации посетите
еще одно отличие двух операций заключается в том, что если таблица содержит столбец идентификаторов, счетчик для этого столбца сбрасывается на 1 (или на начальное значение, определенное для столбца) в разделе усечение. DELETE не влияет на это.
• Удалить Данные: во-первых, сначала оба могут быть использованы для удаления строк из таблицы.
Но DELETE может использоваться для удаления строк не только из таблицы, но и из представления или результата OPENROWSET или OPENQUERY в зависимости от возможностей поставщика.
• из п.: С DELETE вы также можете удалить строки из одна таблица / представление / rowset_function_limited на основе строк из другой таблицы с помощью другого предложения FROM. В этом предложении FROM вы также можете написать нормальные условия соединения. Фактически вы можете создать инструкцию DELETE из инструкции SELECT, которая не содержит агрегатных функций, заменив SELECT на DELETE и удалив имена столбцов.
С TRUNCATE вы не можете этого сделать.
• здесь: усечение не может иметь условий WHERE, но удаление может. Те средства с помощью TRUNCATE вы не можете удалить определенную строку или определенную группу строк. Усечение таблицы аналогично инструкции DELETE без предложения WHERE.
• производительность: усечение таблицы быстрее и использует меньше ресурсов системы и журнала транзакций. И одна из причин-блокировки, используемые в обоих операторах. Инструкция DELETE выполняется с помощью блокировки строк, каждая строка в таблице блокируется для удаления. Усеченная таблица всегда блокирует таблицу и страницу, но не каждую ряд.
• журнал операций : инструкция DELETE удаляет строки по одной и делает отдельные записи в журнале транзакций для каждой строки.
TRUNCATE TABLE удаляет данные, освобождая страницы данных, используемые для хранения данных таблицы, и записывает только освобождение страниц в журнал транзакций.
• страницы : после выполнения инструкции DELETE таблица все еще может содержать пустые страницы. TRUNCATE удаляет данные освобождение страниц данных, используемых для хранения данных таблицы.
• триггер: TRUNCATE не активирует триггеры удаления в таблице. Поэтому вы должны быть очень осторожны при использовании TRUNCATE. Никогда не следует использовать усечение, если триггер delete определен в таблице для автоматической очистки или ведения журнала при удалении строк.
• Столбец Identity : С усечением если таблица содержит столбец идентификатора, счетчик для этого столбец сбрасывается до начального значения, определенного для столбца. Если семя не определено, используется значение по умолчанию 1. DELETE не сбрасывает счетчик идентификаторов. Поэтому, если вы хотите сохранить счетчик идентификаторов, используйте вместо этого DELETE.
• репликация : DELETE можно использовать против таблицы, используемой в репликации транзакций или репликации слиянием.
Хотя усечение нельзя использовать для таблиц, участвующих в репликации транзакций или репликации слиянием.
• откат : оператор DELETE может быть откат.
Усечение также можно откатить, если оно заключено в блок транзакций и сеанс не закрыт. После закрытия сеанса вы не сможете откатить усечение.
• ограничения : оператор DELETE может завершиться ошибкой, если он нарушает триггер или пытается удалить строку, на которую ссылаются данные в другой таблице с ограничением внешнего ключа. Если удалить удаляет несколько строки, и любая из удаленных строк нарушает триггер или ограничение, инструкция отменяется, возвращается ошибка и строки не удаляются.
И если DELETE используется против представления, это представление должно быть обновляемым представлением. Усечение не может использоваться против таблицы, используемой в индексированном представлении.
Усечение не может использоваться против таблицы, на которую ссылается ограничение внешнего ключа, если только таблица не имеет внешнего ключа, ссылающегося на себя.
короче говоря, усечение ничего не регистрирует (так намного быстрее, но не может быть отменено), тогда как delete регистрируется (и может быть частью большей транзакции, будет откат и т. д.). Если у вас есть данные, которые вы не хотите в таблице в dev, обычно лучше усечь, поскольку вы не рискуете заполнить журнал транзакций
большая причина, по которой это удобно,-это когда вам нужно обновить данные в многомиллионной таблице строк, но не хотите ее перестраивать. «Исключить *» займет вечность, в то время как влияние усечения на производительность будет незначительным.