Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Новое на сайте
Топовые новости

Инструкция DELETE

Инструкция DELETE удаляет записи из указанной таблицы или таблиц. Инструкции DELETE, которые выполняются в таблицах, иногда называются поисковыми удалениями (search deletes). Инструкцию DELETE также можно использовать вместе с курсором. Инструкции DELETE, действующие на строки курсора, иногда называются позиционными удалениями (positional deletes).


Синтаксис SQL 2003

DELETE FROM {имя_таблицы | ONLY (имя_таблицы)} [{WHERE условие_поиска | WHERE CURRENT OF имя_курсора}]


Ключевые слова

FROM имя_таблицы

Указывается таблица, имя_таблицы, из которой будут удаляться строки. Если схема в имени таблицы не указана, предполагается текущая схема. В качестве альтернативы вы можете указать имя однотабличного представления. Ключевое слово FROM является обязательным, за исключением инструкции DELETE…WHERE CURRENT OF. Если не используется предложение ONLY, не заключайте имя_таблицы в скобки.

ONL Y (имя_таблицы)

Запрещается каскадное распространение удалений записей на подтаблицы целевой таблицы или представления. Предложение ONLY действует только на объектные таблицы и представления. Если предложение используется в необъектной таблице или представлении, оно игнорируется и ошибки не вызывает. Если используется ключевое слово ONLY, вы должны заключить имя таблицы в скобки.

WHERE условие_поиска

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

WHERE CURRENT OF имя_курсора

Инструкция DELETE ограничивается текущей записью в объявленном и открытом курсоре с именем имя_курсора.


Общие правила

Инструкция DELETE удаляет строки из таблицы или представления. Пространство, освобождающееся после удаления, возвращается базе данных, в которой находится таблица, хотя это может произойти и не сразу.

Простая инструкция DELETE, которая удаляет все записи из данной таблицы, не имеет предложения WHERE.

DELETE FROM sales;

Вы можете использовать любое допустимое предложение WHERE, чтобы отфильтровать те записи, которые вы хотите удалить, а поскольку все эти операции являются поисковыми удалениями, они все включают предложение FROM.

DELETE FROM sales WHERE qty IS NULL;
DELETE FROM suppliers
WHERE supplierid=17 OR compar.yname=’Tokyo Traders’;
DELETE FROM distributors
WHERE postalcode IN
SELECT territorydescription
FROM territories);

В некоторых случаях вам может понадобиться удалить конкретную строку, которая обрабатывается объявленным и открытым курсором.

DELETE titles
WHERE CURRENT OF title_cursor;

В приведенном выше запросе подразумевается, что вы объявили и открыли курсор с именем title_cursor. Та строка, на которой находится курсор, при выполнении приведенной выше команды будет удалена. Обратите внимание, что в приведенном выше примере позиционного удаления не требуется ключевое слово FROM.


Советы и хитрости программирования

Инструкция DELETE редко используется без предложения WHERE, поскольку такая операция приведет к удалению всех записей из указанной таблицы. Сначала вам следует подать команду SELECT с тем же предложением WHERE, которое вы намереваетесь использовать в инструкции DELETE. Это позволит вам точно знать, какие записи будут удалены.

Если возникает необходимость удалить из таблицы все записи, попробуйте использовать нестандартную инструкцию TRUNCATE TABLE. В тех базах данных, которые поддерживают эту команду, инструкция TRUNCATE TABLE обычно является более быстрым методом физического удаления всех строк. Инструкция TRUNCATE TABLE выполняется быстрее, чем DELETE, поскольку удаления отдельных строк не записываются в журнал. На некоторых платформах это приводит к тому, что откат инструкции TRUNCATE становится невозможным. Уменьшение затрат ресурсов на журналирование позволяет сэкономить довольно много времени при удалении большого числа записей. На некоторых платформах перед подачей инструкции TRUNCATE необходимо удалить все внешние ключи.

Источник