Операторы определения данных в 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
Добавить комментарий