T-SQL предоставя две ключови думи, които ви позволяват да изтривате данни от таблица. Те са ИЗТРИВАНЕ и ОТРЕЗЯНЕ . Те си приличат в това, което правят, но използват много различни методи. В тази статия обсъждаме основните механизми за тези ключови думи.
Разлика между TRUNCATE и DELETE
ОСКЪЗВАНЕ:
- TRUNCATE е DDL команда.
- TRUNCATE TABLE винаги заключва таблицата и страницата. Той обаче не заключва всеки ред.
- Условието WHERE не може да се използва.
- Командата премахва всички данни.
- TRUNCATE TABLE не може да активира тригер, защото операцията не регистрира отделни изтривания на ред.
- По-бързо в производителността, защото не съхранява регистрационни файлове.
- Възможно е връщане назад.
ИЗТРИВАНЕ:
- DELETE е DML команда.
- Изразът DELETE използва заключване на ред, докато се изпълнява. Всеки ред в таблицата е заключен за изтриване.
- Можете да посочите филтри в клаузата WHERE.
- Командата изтрива определени данни, ако съществува условието WHERE.
- DELETE активира задействане, защото операциите се записват поотделно.
- DELETE е по-бавно от TRUNCATE, защото съхранява регистрационни файлове.
- Възможно е връщане назад.
Как да изтрия данни с помощта на TRUNCATE?
Следващият пример премахва всички данни от таблицата Person. ИЗБЕРЕТЕ изявленията са включени преди и след ОТРЕЗВАНЕ НА ТАБЛИЦАТА изявление за сравнение на резултатите.
USE AdventureWorks2012;
GO
SELECT COUNT(*) AS BeforeTruncateCount
FROM Person.Person;
GO
TRUNCATE TABLE Person.Person;
GO
SELECT COUNT(*) AS AfterTruncateCount
FROM Person.Person;
GO
Нека подчертаем някои предимства.
ТАБЛИЦАТА ОТРЕЗВАНЕ командата изтрива всички редове от таблица, като освобождава страниците с данни, използвани за съхраняване на данните от таблицата. След като операцията приключи, таблицата съдържа нула страници. Не се регистрира за отделните изтривания на редове. Командата записва освобождаването на страница в дневника на транзакциите. ОТСЪЩАНЕ командата използва по-малко пространство в журнала. Обикновено се използват по-малко ключалки. Командата изтрива всички редове от таблица, но структурата на таблицата и нейните колони, ограничения, индекси и т.н. остават. За да премахнете масата. трябва да използвате DROP TABLE .
Ако таблица съдържа колона за идентичност, броячът за тази колона се нулира до началната стойност, дефинирана за колоната. Ако не е дефинирано начално число, се използва стойността по подразбиране 1. За да запазите брояча на самоличността, използвайте DELETE вместо това.
Изтриване на всички редове чрез DELETE
Следният пример изтрива всички редове от таблицата Person:
DELETE FROM Person.Person;
GO
ИЗТРИВАНЕ премахва редове един по един. Командата добавя новия запис към дневника на транзакциите за всеки изтрит ред. ИЗТРИВАНЕ използва заключване на ред по време на изпълнение, което означава, че всеки ред в таблицата е заключен за изтриване. Веднъж ИЗТРИВАНЕ се изпълнява, таблица все още може да съдържа празни страници с данни. Например, празните страници в хийпа не могат да бъдат освободени без поне изключителна (LCK_M_X) заключване на таблица. ИЗТРИВАНЕ и ОТРЕЗЯНЕ и двете могат да бъдат връщани назад, когато се използват с TRANSACTION .
Прочетете също
Разлика между DELETE и TRUNCATE таблица в SQL Server