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

Инструкции DROP

Все объекты базы данных, созданные с помощью инструкций CREATE, могут быть уничтожены при помощи соответствующих инструкций DROP. На некоторых платформах восстановить объект после удаления можно командой ROLLBACK. Однако на других платформах инструкция DROP является необратимой и окончательной, поэтому эту команду следует применять осторожно.


Синтаксис SQL 2003

В настоящее время стандарт SQL 2003 поддерживает возможность удаления объектов многих типов, многие из которых не поддерживаются большинством производителей. Синтаксис ANSI SQL 2003 имеет следующий формат.

DROP {тип_объекта} имя_объекта {RESTRICT | CASCADE} [RESTRICT] CASCADE

Удаление не выполняется, если существуют зависимые объекты (RESTRICT) или же все зависимые объекты также удаляются (CASCADE). Это предложение не употребляется с некоторыми формами инструкции DROP, например DROP TRIGGER, но для других оно является обязательным, например для DROP SCHEMA. Объясним. Инструкция DROP SCHEMA RESTRICT может удалить только пустую схему. Если же схема содержит объекты, операция не будет выполнена. И наоборот, инструкция DROP SCHEMA CASCADE удалит и схему, и все содержащиеся в ней объекты.


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

Правила создания или изменения каждого типа объектов приведены в описаниях соответствующих инструкций CREATE/ALTER.

Инструкция DROP уничтожает уже существующий объект. Объект удаляется окончательно, и все объекты, обращавшиеся к объекту, немедленно теряют к нему доступ.

Объект может быть квалифицированным, то есть вы можете полностью указать схему, в которой расположен удаляемый объект. Например:

DROP TABLE scott.sales_2004 CASCADE;

Приведенная выше инструкция не только удалит таблицу scott.sales_2004, но также удалит все представления, триггеры и ограничения, созданные на ее основе. С другой стороны, инструкция DROP может включать неквалифицированное имя объекта, и тогда подразумевается контекст текущей схемы. Например:

DROP TRIGGER before_ins_emp; DROP ROLE sales_mgr;

В большинстве реализаций команда DROP не будет выполнена, если объект базы данных использует другой пользователь (хотя это и не рекомендуется стандартом SQL 2003).


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

Инструкция DROP работает только применительно к существующему объекту подходящего типа, к которому пользователь имеет соответствующие права доступа, обычно права DROP TABLE. (За дополнительной информацией обращайтесь к разделу «Инструкция GRANT».) Стандарт требует, чтобы объект мог удалять только его владелец, но в большинстве платформ в этом вопросе допускаются варианты. Например, суперпользователь базы данных обычно может удалить на сервере базы любой объект.

У некоторых производителей команда DROP генерирует ошибку, если объект базы данных имеет расширенные свойства. Например, Microsoft SQL Server не удалит реплицируемую таблицу до тех пор, пока вы не исключите ее из репликации.

Важно знать, что большинство производителей не уведомляют вас о том, что команда DROP вызывала проблему, связанную с зависимостями. Так. если таблица, используемая где-нибудь в базе данных несколькими представлениями и записанными процедурами, удаляется, никаких предупреждений не выводится. Эти прочие объекты будут просто выдавать ошибки при доступе к ним. Чтобы избежать этого, вы можете использовать в нужном месте синтаксическую конструкцию RESTRICT.

Вы, должно быть, заметили, что стандарт ANSI не поддерживает некоторые распространенные команды DROP, такие, как DROP DATABASE или DROP INDEX, хотя платформы всех производителей, описываемые в этой книге, поддерживают эти команды. Точный синтаксис каждой из этих команд описывается ниже, в разделах, посвященных разным платформам.

Источник