Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гайдамакин Н. А. Автоматизированные информационные системы, базы и банки данных. Вводный курс.doc
Скачиваний:
372
Добавлен:
02.05.2014
Размер:
4.3 Mб
Скачать

4.3.2.3. Управляющие запросы

В большинстве современных СУБД проектирование и со­здание таблиц осуществляются через специальные диалогово-наглядные конструкторы или пошаговые мастера. Тем не ме­нее, как уже отмечалось, в составе языка описания данных DDL имеются ряд SQL-инструкций, на основе которых строятся зап­росы по созданию/модификации реляционных таблиц или от­дельных их элементов. Такие запросы называютсяуправляющими.

Имеется четыревида управляющих запросов:

• запросы на создание таблицы;*

• запросы на добавление в существующую таблицу нового поля или индекса;

• запросы на удаление таблицы или индекса определенно­го поля таблицы;

• запросы на создание индекса для поля или группы полей таблицы.

*В отличие от одноименного запроса из группы запросов на изменение данный тип запроса не использует в качестве исходных данных другие уже существующие в базе данных таблицы, т. е. создает новую пустую таблицу.

Запросы на создание таблицыреализуются SQL-инструкцией CREAТЕ TABLEс ключевыми словами, определяющими типы полей (CHARACTER, INTEGER, DATETIMEи т.д.), пред­ложением CONSTRAINT длясоздания ограничений на значе­ния полей или связей между таблицами, ключевым словомUNIQUE,задающим свойство уникальности (требование на отсутствие совпадений) индекса таблицы, а также ключевого слова PRIMARYKEY,определяющего ключевое поле создаваемой таблицы.

В качестве примера приведем запрос на создание таблицы «Сотрудники» с полями «Фамилия», «Имя», «ДатаРождения», уникальным составным индексом «ИндексСотрудники» для полей «Фамилия», «Имя», «ДатаРождения», с тем же набором полей для составного ключа «КлючСотрудники».*

*В стандартах SQLи в большинстве диалектов SQLсимволы кириллицы в на­званиях полей не допускаются.

CREAТЕ TABLECотрудники

(Фамилия TEXT,Имя TEXT,ДатаРождения DA TETIME, CONSTRAINTИндексCотрудникиUNIQUE(Имя, Фамилия, ДатаРождения)

КлючСотрудники PRIMARY KEY);

Запросы на добавление полей или индексовреализуются SQL-инструкцией ALTER TABLEс использованием зарезервированных слов ADD COLUMN(добавить поле) иADD CONSTRAINT (добавить индекс). Этим же запросом с по­мощью зарезервированного слова DROP COLUMNможно уда­лить поле из существующей таблицы. Как правило, запросы на добавление полей также используются для создания внешних ключей, задающих связи-отношения между таблицами. С этой целью используются зарезервированные слова FOREIGN KEY и REFERENCES.

Для примера приведем запросы по добавлению в таблицу «Сотрудники» нового поля «Оклад», добавлению нового индек­са «ОкладСотрудники», удалению поля «Оклад», добавлению внешнего ключа «№_Отдела» и удалению внешнего ключа:

ALTER TABLE Сотрудники ADD COLUMNОклад CURRENCY;

ALTER TABLECoтрудникиАDD CONSTRAINTOкладCoтрудники Оклад;

ALTER TABLE Сотрудники DROPCOLUMNOклад;

ALTER TABLEСотрудникиADD CONSTRAINTРаботаFOREIGN KEY(№_Отдела)

REFERENCES Подразделения (№_Отдела);

ALTER TABLEСотрудники DROP CONSTRAINTРабота;

Запросы на удаление таблицы или индексареализуются SQL-инструкцией DROP TABLE с указанием имени удаляемой таблицы или индекса. Следующий пример иллюстрирует уда­ление из базы данных таблицы «Сотрудники» и удаление ин­декса «ОкладСотрудники»:

DROPTABLEСотрудники;

DROPINDEXОкладСотрудники ONСотрудники;

Запросы на создание индексареализуются SQL-инструкцией CREAТЕINDEX сиспользованием зарезервированного слова UNIQUE длязапрета повтора значений в индексируемом поле инеобязательного предложения WITH с параметрами DISALLOW NULL и IGNORE NULLдля запрета/разрешения нулевых (пустых) значений в индексируемом поле. Зарезерви­рованное слово PRIMARY позволяет определить создаваемый индекс ключом таблицы (при этом создаваемый индекс по умол­чанию является уникальным, т.е. повторы значений не допус­каются).

В следующем примере в таблице «Сотрудники» создастся уникальный индекс «ИндексСотрудника» по полю «Таб_№» с запретом пустых значений:

CREAТЕ UNIQUE INDEXИндексСотрудника

ONСотрудники (Таб_№)

WITH DISALLOW NULL;