Как бы ни были ценны данные, хранящиеся в ваших таблицах, и сколько бы времени вы ни потратили на их внесение в базу данных, приходит время, когда эти данные устаревают и становятся ненужными. Тогда приходится их удалять, чтобы освободить пространство в таблицах для новых данных. Какова бы ни была причина удаления данных, это наверняка придется делать любому пользователю. Поэтому необходимо иметь представление, как это делается, иначе вместе с действительно ненужными данными могут быть случайно удалены и актуальные строки.
Удаление данных из таблицы выполняется построчно. За одну операцию можно выполнить удаление как одной строки, так и нескольких тысяч строк. Если необходимо удалить из таблицы все данные, то можно удалить саму таблицу. Естественно, при этом будут удалены и все хранящиеся в ней данные. Однако этот способ следует использовать лишь в самых крайних случаях, так как помимо данных будет удалена и структура таблицы. Чаще всего удаление данных выполняется командой DELETE, удаляющей строки таблицы. Полный синтаксис команды DELETE достаточно сложен. Однако на практике чаще всего используется облегченный вариант:
DELETE таблица_или_представление
[FROM источники_таблиц]
[WHERE условие_отбора].
Если фраза WHERE упущена, удаляются все строки в указанной таблице или представлении. Оператор DELETE не поддерживает применение операции JOIN, поэтому вам следует связывать таблицы или представления в фразе WHERE оператора.
Если таблица участвует в отношении, важно не допустить, чтобы при удалении в главной таблице остались “висячие” строки. Висячими строками называют строки в зависимой таблице (таблице внешнего ключа), которые не имеют соответствующих строк в главной таблице (таблице первичного ключа). Новинкой в SQL Server является возможность каскадных удалений в отношении. Если для отношения задается каскадное удаление, SQL Server автоматически удалит строки в зависимой таблице, чтобы не оставлять висячих строк.
Удаление с помощью оператора TRUNCATE TABLE.
Этот оператор удаляет все строки из таблицы. Отличается от оператора DELETE тем, что не записывается в журнал транзакций, что существенно ускоряет его выполнение.
Рассмотрим пример удаления всех студентов из таблицы Students, имена которых начинаются на букву ‘A’: