Удаление и усечение SQL Server Краткое справочное руководство
Автор: Aubrey Love | Обновлено: 06.09.2022 | Комментарии (4) | Связанный: Подробнее > TSQL
Проблема
Вас как администратора баз данных могут попросить удалить определенные записи или все данные из таблицы. Пример было бы удалить все данные старше X лет, потому что они больше не актуальны. Возможно, вас просят удалять все данные из таблицы каждый год, чтобы регистрировать только данные текущего года. В любом случае нужно держать стол и стол конструкция на месте. Это подводит нас к вопросу, должен ли я использовать DELETE или TRUNCATE? Как я могу определить, какая команда является правильной для SQL-запроса?
Решение
В этом руководстве по Microsoft SQL Server мы обсудим различия между командой DELETE и команда TRUNCATE. Как только вы поймете сходства и различия, вы можете принять лучшее решение о том, какой из них лучше всего использовать в вашей ситуации. Для вашего удобства я включил параллельную сравнительную таблицу, которая показывает различия между каждой командой.
Команда SQL УДАЛИТЬ
Как показано в «Краткой справочной таблице» (ниже), оператор DELETE это команда DML (язык манипулирования данными). Оператор DELETE позволяет использовать предложения WHERE для удаления только тех строк или кортежей, которые соответствуют заданным условиям. в предложении WHERE. Без предложения WHERE все строки (кортежи) удаляются из Таблица. Все удаленные строки будут зарегистрированы в журнале транзакций, поскольку это полностью зарегистрированная транзакция, вы сможете восстановить это данные при необходимости.
Команда SQL TRUNCATE
TRUNCATE — это команда DDL (язык определения данных). Он используется для удаления всех строк в таблице и не может включать предложение WHERE. Команда TRUNCATE работает намного быстрее, чем команда DELETE, поскольку она удаляет (усекает) все строки как блок, а не построчно.
Если вы используете транзакцию с командой TRUNCATE, вы можете использовать ROLLBACK для отмены усечение. Команда TRUNCATE не позволит опции ROLLBACK отменить удаленные строки в таблице после применения функции COMMIT.
Операция TRUNCATE полностью зарегистрирована в журнале транзакций, но не занимает столько места в журнале, сколько операция DELETE, удаляющая все строки. На изображении ниже показан размер файла журнала после выполнения команд DELETE и TRUNCATE. Обе таблицы были идентичны по структуре и количеству данных, о чем свидетельствует размер файла mdf на изображении ниже.
Оператор DELETE и оператор TRUNCATE Краткий справочник
Следующая таблица представляет собой краткое справочное руководство, которое можно использовать для доступ. Хотя он не включает все различия между командами DELETE и TRUNCATE, он охватывает множество основных элементов этих двух команд.
УДАЛИТЬ | Против. | ОБРЕЗАТЬ |
---|---|---|
DELETE — это команда DML. | Тип языка SQL | TRUNCATE — это команда DDL. |
Команда DELETE может содержат предложение WHERE для удаления только определенных строк или кортежей. | Определение | Команда ОТРЕЗАТЬ используется для удаления всех данных из таблицы. Вы не можете использовать предложение WHERE для фильтрации определенных строк или кортежей. |
Команда DELETE устанавливает блокирует каждую запись, требуя больше блокировок и ресурсов, чем TRUNCATE команда. | Замки и ресурсы | Команда ОТРЕЗАТЬ требуется только блокировка на уровне таблицы, а не в каждой строке. |
Если вы используете транзакцию BEGIN, вы можете ROLLBACK выполнить команду. | СОВЕРШИТЬ/ОТКАТ | Если вы используете транзакцию BEGIN, вы можете ROLLBACK выполнить команду. |
Команда УДАЛИТЬ записывать данные удаленных строк в журнал транзакций. | Журнал транзакций Используйте | Команда ОТРЕЗАТЬ только записывает удаленную таблицу целиком в журнал транзакций. |
Команда DELETE активирует все триггеры, примененные к таблице, т. е. триггер аудита, если триггеры не отключены заранее. | Триггеры | TRUNCATE не будет активировать любые триггеры, примененные к таблице. Итак, триггеры аудита регистрируют, кто удаленная строка не будет срабатывать. |
Команда DELETE не будет повторно заполнять значения идентификаторов для стол. | Столбцы идентификаторов | Команда ОТРЕЗАТЬ повторно заполнит (сбросит) значения идентификаторов для таблицы. |
Наличие внешних ключей и/или индексированных представлений не влияет на DELETE. команда, если на строки, которые вы пытаетесь удалить, не ссылается другие таблицы. | Внешние ключи и индексированные Просмотры | Вы не можете использовать TRUNCATE команда, если на таблицу ссылается внешний ключ или какие-либо индексированные представления. |
DELETE и TRUNCATE Оператор таблицы
У меня есть две таблицы, каждая из которых содержит 15 000 000 (15 миллионов) строк данных в шести столбцах. Две таблицы идентичны по структуре и данным.
В этом первом примере мы будем использовать команду DELETE, чтобы получить выполнение план и общее время работы. Вот синтаксис:
УДАЛИТЬ ИЗ Sales.Customers2; ИДТИ
Общее время УДАЛЕНИЯ 15 миллионов строк данных заняло 118 секунд . Мы также можем увидеть, как выглядит план выполнения.
В этом примере мы будем использовать команду TRUNCATE для таблицы, которая является точным копия предыдущей таблицы. Вот синтаксис:
TRUNCATE TABLE Sales.Customers3; ИДТИ
Общее время для TRUNCATE 15 миллионов строк данных заняло менее 1 секунды . Обратите внимание, что при использовании команды TRUNCATE план выполнения не создается.
DELETE vs TRUNCATE Сводка команд SQL
Мы рассмотрели основы команд DELETE и TRUNCATE, касаясь плюсов и минусов каждой команды в СУБД Microsoft SQL Server. Я также предоставил таблицу для печати (шпаргалка) для вашего удобства.
Итак, какой вариант подходит именно вам? Ну, это зависит от ваших потребностей. Если вам нужно удалить только определенные строки (кортежи) из таблицы, вы необходимо использовать команду DELETE. Однако, если вам нужно удалить все записи в таблице, то вы должны использовать команду TRUNCATE до тех пор, пока все вышеперечисленное правила применимы к вашей ситуации.
Следующие шаги
- Удаление записей в SQL Server с помощью команд TRUNCATE и DELETE
- Обрезать все таблицы в базе данных SQL Server
- Удалить оператор SQL в SQL Server, Oracle и PostgreSQL
- SQL Примеры удаленных таблиц с T-SQL и SQL Server Management Studio
- SQL Server DROP TABLE IF EXISTS Примеры
Об авторе
Обри Лав — администратор баз данных-самоучка с более чем шестилетним опытом проектирования, создания и мониторинга баз данных SQL Server в качестве администратора баз данных/специалиста по бизнес-аналитике. Сертификаты включают MCSA, A+, Linux+ и Google Map Tools с более чем 40-летним опытом работы в компьютерной индустрии. Обри впервые начал работать над ПК, когда они были представлены публике в конце 70-х.Посмотреть все мои советы
Последнее обновление статьи: 06.09.2022
SQL TRUNCATE Table — Темы масштабирования
SQL TRUNCATE Table
SQL TRUNCATE Table
share-outline th Varma Бесплатно Зарегистрировано: 1000 Курс по СУБД — овладение основами и расширенными концепциями Шрикант Варма Свободно Начать обучениеОбзор
Команда TRUNCATE TABLE в SQL используется для удаления записей/строк из таблицы. Это команда языка определения данных (DDL), аналогичная команде DELETE без предложения where.
Что такое TRUNCATE в SQL?
Оператор TRUNCATE в SQL — это команда DDL (язык определения данных), которая используется для удаления записей/строк из таблицы в нашей базе данных.
Когда мы сохраняем некоторые данные в нашей таблице SQL, она сохраняет эти данные на сервере SQL. SQL-сервер хранит данные таблицы в виде страниц. Когда оператор truncate вызывается для удаления записей, он освобождает страницы от сервера, и все записи удаляются.
Более того, мы можем сказать, что оператор TRUNCATE аналогичен оператору DELETE в SQL без предложения WHERE.
Синтаксис
Синтаксис оператора усечения:
Аргументы
имя_базы_данных
Имя базы данных, которую мы используем для усечения записей.
имя_схемы
Имя схемы — это имя схемы, к которой принадлежит конкретная таблица.
имя_таблицы
Нам нужно указать имя таблицы, которую нужно обрезать или из которой удаляются все записи.
TRUNCATE TABLE Примеры
1. Усечение таблицы
Предположим, у нас есть база данных (ABC), в которой присутствуют две таблицы, т. е. Customers и Sales. Таблица Customers имеет следующие пять атрибутов:
- ID клиента
- Имя клиента
- Номер телефона
- Адрес электронной почты
- Идентификатор элемента
СВОЙСТВО | ИМЯ АТРИБУТА | ТИП ДАННЫХ |
---|---|---|
ОСНОВНОЙ | CUSTOMER_ID | INT |
CUSTOMER_NAME | VARCHAR | PHONE_NUMBER | VARCHAR |
ITEM_ID | INT | |
EMAIL_ADDRESS | ВАРЧАР |
Таблица Sales имеет следующие четыре атрибута:
- ID товара
- Наименование товара
- Цена предмета
- Товаров осталось
СВОЙСТВО | ИМЯ АТРИБУТА | ТИП ДАННЫХ |
---|---|---|
ОСНОВНОЙ | ITEM_ID | INT |
ITEM_NAME | VARCHAR | |
ITEM_PRICE | INT | |
ITEM_LEFT | INT |
Учитывая две приведенные выше таблицы, мы должны усечь таблицу Customers.
Объяснение:
- В Query 1 мы визуализируем таблицу из таблицы клиента
- В запросе 2 мы удаляем записи таблицы клиента с помощью оператора truncate.
- В запросе 3 мы снова визуализируем таблицу клиентов, но теперь таблица будет пустой. Это связано с тем, что данные были удалены оператором truncate.
TRUNCATE против таблицы DELETE
УДАЛИТЬ | TRUNCATE |
---|---|
Оператор удаления — это команда DML. | Оператор Truncate — это команда DDL. |
Оператор Delete используется для удаления всех строк, указанных с помощью предложения WHERE. | Оператор Truncate удаляет все записи из таблицы. |
Это медленнее, чем команда TRUNCATE. | Это быстрее, чем команда DELETE. |
Удаляет по одной записи за раз. | Удаляет все строки в таблице, освобождая страницы, используемые для хранения данных таблицы. Оставить комментарий
|