Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
conspect.pdf
Скачиваний:
374
Добавлен:
17.03.2016
Размер:
27.86 Mб
Скачать

Базы данных

БГУИР, ПОИТ

 

 

6.9. Оператор DELETE

6.9.1. Общая структура оператора DELETE

Оператор DELETE поддерживает насколько вариантов синтаксиса. Для работы с одной таблицей и несколькими таблицами:

6.9.2. DELETE: [QUICK]

Ключевое слово QUICK говорит СУБД, что после операции удаления не нужно оптимизировать «дырки в индексе». Это удобно в случае, если в скором времени на «пустое место» попадут новые записи с такими же значениями индексированных полей, как у удалённых.

Дополнительные подробности см. здесь: http://dev.mysql.com/doc/refman/5.5/en/delete.html

6.9.3. DELETE: [IGNORE]

Как и в других операторах управления данными ключевое слово IGNORE «заставляет» СУБД переводить ошибки в разряд предупреждений.

Например, при использовании IGNORE успешно проходит запрос на удаление с запретом каскадного удаления (да, ничего не удаляется, но ошибки выполнения запроса не возникает).

Стр: 235/248

Базы данных

БГУИР, ПОИТ

 

 

6.9.4. DELETE: пример и важное напоминание

Как и в случае UPDATE/REPLACE, при использовании DELETE обязательно надо указать условие, иначе вы просто «грохнете всю таблицу».

Пример использования DELETE:

Исходное состояние

 

Запрос

 

Конечное состояние

таблицы

 

 

 

таблицы

 

 

DELETE FROM `goods`

 

 

 

 

WHERE `g_id` NOT

 

 

 

 

IN (3, 4, 5)

 

 

 

 

 

 

 

6.9.5.DELETE: работа с несколькими таблицами

Q:Зачем в синтаксисе DELETE предусмотрена возможность работы с несколькими таблицами?

A: Логика здесь такая же, как и при работе с несколькими таблицами в контексте UPDATE. Используется это для того, чтобы «скрестить» DELETE и JOIN.

Рассмотрим пару областей применения.

Использовать DELETE при работе с несколькими таблицами можно для:

Имитации каскадного удаления (осторожно! непривычный синтаксис!)

DELETE `goods`, `categories` FROM `goods`, `categories`

WHERE `goods`.`category` = `categories`.`id` AND `categories`.`id` = 1

Удаления «связанных наборов значений» в случае связи M-2-M (например, удаляется группа товаров и все характеристики этих товаров).

Поиска и удаления записей-дубликатов (по некоторым критериям) из разных таблиц (в т.ч. в разных БД).

6.9.6. Способ быстрой полной очистки таблицы

Для быстрого очищения таблицы используется оператор TRUNCATE. В отличие от DELETE он:

Не вызывает срабатывания delete-триггеров.

Удаляет сразу весь набор данных, а не «запись за записью».

Работает ГОРАЗДО быстрее.

Не возвращает количество удалённых записей.

Не обновляет (а просто очищает) индексы.

См. подробности здесь: http://dev.mysql.com/doc/refman/5.5/en/truncate-table.html

Стр: 236/248

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]