Операторы определения данных в SQL – CREATE, DROP

Базы данных содержат различные объекты – таблицы (Table), представления (View), индексы (Index) и другие. Определять данные объекты с точки зрения разработки всей системы лучше всего на этапе проектирования базы данных, однако язык SQL позволят оперировать ими и в оперативном режиме. Для этого в язык SQL включен ряд команд (язык DDL), которые позволяют создавать, изменять, удалять и переименовывать структуры объектов, предназначенных для хранения данных.

Всего таких команд 6 – CREATE, ALTER, DROP, TRUNCATE, COMMENT, RENAME, но наибольшую важность представляют две из них: CREATE и DROP.

Как у любого оператора любого другого языка, команды CREATE и DROP имеют специальный синтаксис (правила использования команды).

Создание таблицы производится следующим образом:

CREATE TABLE имя_таблицы

{

имя_столбца тип_данных [значение_по_умолчанию] [ограничение_столбца],

имя_столбца тип_данных [значение_по_умолчанию] [ограничение_столбца],

…,

[ограничения_таблицы]}

Квадратные скобки [] указывают на необязательность тех или иных параметров команды CREATE, «ограничение_столбца» и «ограничения_таблицы» опеределяют ограничения целостности для столбцов и таблицы соответственно, «значение_по_умолчанию» будет записано в столбец в случае отсутствия конкретного значения при добавлении нового кортежа. Тип данных определяет как тип данных столбца, так и размер области для хранения данных (длина строки, количество цифр числа и так далее). В простейшем случае создание таблицы для отношения Студент производится командой:

CREATE TABLE student

{

STUDENT_ID INTEGER,

ID_CARD_NUM VARCHAR(32),

LAST_NAME VARCHAR(70),

FIRST_NAME VARCHAR(40),

MID_NAME VARCHAR(40),

BIRTH_DATE DATE,

YEAR_IN INTEGER

}

Ограничения реализуют правила по обеспечению целостности данных на уровне столбцов и таблиц, предотвращая удаление таблицы при наличии ссылок. Существуют следующие виды ограничений:

- NOT NULL – обязательность значений для столбца (задается только на уровне столбца);

- UNIQUE – уникальность значений в столбце (при задании на уровне столбца допускает наличие неопределенных значений, автоматически создает уникальный индекс);

- PRIMARY KEY – первичный ключ (создает первичный ключ с параметрами UNIQUE и NOT NULL, автоматически создает уникальный индекс);

- FOREIGN KEY – внешний ключ (возможно использование также ключевых слов REFERENCES – указывает таблицу и поле, на которое ссылается, - и ON DELETE CASCADE – разрешает удаление строк в зависимой таблице при удалении строки в родительской);

- CHECK – дополнительные ограничения на вид значений столбца.

Синтаксис использования ограничения на уровне столбца:

имя_столбца [CONSTRAINT имя_ограничения] тип_ограничения,

на уровне таблицы:

[CONSTRAINT имя_ограничения] тип_ограничения

С учетом ограничений создание таблицы для отношения Студент с первичным ключом STUDENT_ID, уникальным непустым полем ID_CARD_NUM (номер студенческого билета), непустыми полями LAST_NAME, FIRST_NAME, BIRTH_DATE и YEAR_IN (фамилия, имя, дата рождения и год поступления) будет выглядеть так:

CREATE TABLE student

{

STUDENT_ID INTEGER PRIMARY KEY,

ID_CARD_NUM VARCHAR(32) UNIQUE NOT NULL,

LAST_NAME VARCHAR(70) NOT NULL,

FIRST_NAME VARCHAR(40) NOT NULL,

MID_NAME VARCHAR(40),

BIRTH_DATE DATE NOT NULL,

YEAR_IN INTEGER NOT NULL

}

Ограничение CHECK задает условия, которым должны удовлетворять значения столбца или группы столбцов в каждой строке. Примером такого ограничения может быть CHECK (YEAR_IN BETWEEN 1999 AND 2007).

Команда CREATE позволяет создавать таблицы также на основе существующих данных, вставляя сразу и необходимые строки, в этом случае синтаксис следующий:

CREATE TABLE имя_таблицы [(имя_столбца, имя_столбца, …)] AS запрос

Например, создать таблицу сущности Студент можно из начальной таблицы Персоны, в которой перечислены все персоны с указанием их статуса (студент, преподаватель, работник и другие):

CREATE TABLE student AS

SELECT LAST_NAME, FIRST_NAME, MID_NAME, BIRTH_DATE FROM persons WHERE person_type=’student’

Удаление таблиц происходит следующим образом:

DROP TABLE имя_таблицы [CASCADE CONSTRAINTS]

Данная команда удаляет все данные из таблицы, все индексы, а ее откат невозможен. Для удаления таблицы студент потребуется выполнить операцию:

DROP TABLE students

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

Создание индекса производится следующим образом:

CREATE INDEX имя_индекса ON имя_таблицы (имя_столбца [, имя_столбца, …])

Необходимым условием корректного выполнения данной операции является наличие предварительно созданной таблицы, содержащей столбцы, указанные в запросе. Будучи однажды созданным, индекс невидим для пользователя, а все операции с ним осуществляет СУБД.

Например, создание индекса для столбца ID_CARD_NUM в таблице STUDENT выполняется следующей командой:

CREATE INDEX id_card_index ON students (id_card_num)

Удаление индекса производится следующим образом:

DELETE INDEX имя_индекса

При этом указание имени индекса обязательно, а само удаление не изменяет значение поля (столбца), индекс для которого удаляется. Для удаления созданного в предыдущем примере индекса необходимо выполнить команду:

DELETE INDEX id_card_index