Показаны различия между двумя версиями страницы.
| Следующая версия | Предыдущая версия | ||
|
delete [2021/01/31 10:53] dja создано |
delete [2021/01/31 11:34] (текущий) dja [Оператор TRUNCATE TABLE] |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | Оператор | + | ===== Оператор DELETE |
| + | удаляет строки из временных или постоянных базовых таблиц, | ||
| < | < | ||
| - | 1. DELETE FROM <имя таблицы > | + | 1. DELETE FROM <имя таблицы> |
| 2. [WHERE < | 2. [WHERE < | ||
| + | |||
| </ | </ | ||
| + | |||
| Если предложение **WHERE** отсутствует, | Если предложение **WHERE** отсутствует, | ||
| < | < | ||
| - | TRUNCATE TABLE <имя таблицы> | + | |
| + | 1. TRUNCATE TABLE <имя таблицы> | ||
| </ | </ | ||
| + | Однако есть ряд особенностей в реализации команды **TRUNCATE TABLE**, которые следует иметь в виду: | ||
| + | |||
| + | * Элемент ненумерованного спискане журнализируется удаление отдельных строк таблицы; | ||
| + | |||
| + | * не отрабатывают триггеры, | ||
| + | |||
| + | * команда неприменима, | ||
| + | |||
| + | * значение счетчика **(IDENTITY)** | ||
| + | |||
| + | **Пример** | ||
| + | |||
| + | <font inherit/ | ||
| + | |||
| + | < | ||
| + | 1. DELETE FROM Laptop | ||
| + | 2. WHERE screen < 12; | ||
| + | </ | ||
| + | |||
| + | Все блокноты можно удалить с помощью оператора | ||
| + | |||
| + | < | ||
| + | 1. DELETE FROM Laptop; | ||
| + | </ | ||
| + | или | ||
| + | < | ||
| + | 1. TRUNCATE TABLE Laptop; | ||
| + | </ | ||
| + | Transact-SQL расширяет синтаксис оператора **DELETE**, вводя дополнительное предложение **FROM**: | ||
| + | < | ||
| + | FROM < | ||
| + | </ | ||
| + | При помощи источника табличного типа можно конкретизировать данные, | ||
| + | |||
| + | При помощи этого предложения можно выполнять соединения таблиц, | ||
| + | |||
| + | **Пример** | ||
| + | <color # | ||
| + | Используя стандартный синтаксис, | ||
| + | < | ||
| + | 1. DELETE FROM Product | ||
| + | 2. WHERE type = ' | ||
| + | 3. model NOT IN (SELECT model | ||
| + | 4. FROM PC | ||
| + | 5. ); | ||
| + | </ | ||
| + | Заметим, | ||
| + | |||
| + | Эту же задачу можно решить с помощью дополнительного предложения **FROM** следующим образом: | ||
| + | < | ||
| + | 1. DELETE FROM Product | ||
| + | 2. FROM Product pr LEFT JOIN | ||
| + | 3. PC ON pr.model = PC.model | ||
| + | 4. WHERE type = ' | ||
| + | 5. PC.model IS NULL; | ||
| + | </ | ||
| + | Здесь применяется внешнее соединение, | ||
| + | |||
| + | ===== Оператор TRUNCATE TABLE ===== | ||
| + | |||
| + | Как отмечалось выше, при выполнении этой команды значение счетчика (IDENTITY) сбрасывается в начальное значение. Давайте проверим это утверждение в MS SQL Server. Для начала создадим таблицу с автоинкрементируемым столбцом, | ||
| + | < | ||
| + | 1. CREATE TABLE Truncate_test (id INT IDENTITY(5, | ||
| + | 2. GO | ||
| + | 3. INSERT INTO Truncate_test(val) | ||
| + | 4. VALUES (1), | ||
| + | 5. SELECT * FROM Truncate_test; | ||
| + | 6. GO | ||
| + | </ | ||