Вопрос 10 . Язык запросов SQL . Операторы языка определения данных DDL: CREATE TABLE; DROP TABLE; ALTER TABLE; CREATE INDEX; DROP INDEX. Привести примеры.


Добавил:DMT
Дата создания:30 декабря 2007, 18:09
Дата обновления:30 декабря 2007, 20:43
Просмотров:40265 последний позавчера, 0:49
Комментариев: 0

Вопрос 10 . Язык запросов SQL . Операторы языка определения данных DDL: CREATE TABLE; DROP TABLE; ALTER TABLE; CREATE INDEX; DROP INDEX. Привести примеры.

Операторы языка SQL можно условно разделить на два подъязыка : язык определения данных ( Data Definition Language DDL ) и язык манипулирования данными ( Data Manipulation Language DML ).

Операторы языка DDL

Вид

Название

Назначение

DDL

CREATE TABLE

создание таблицы

DROP TABLE

удаление таблицы

ALTER TABLE

изменение структуры таблицы

CREATE INDEX

создание индекса

DROP INDEX

удаление индекса

Инструкция CREATE TABLE .

Назначение: создание новой таблицы.

Синтаксис :

CREATE [ TEMPORARY ] TABLE таблица ( поле _1 тип [( размер )] [ NOT NULL ]

[индекс_1] [, поле_2 тип [(размер)] [ NOT NULL ] [индекс_2] [, ...]]

[,составной_индекс [, ...]])

Аргументы инструкции CREATE TABLE :

таблица - имя создаваемой таблицы;

поле_1, поле_2 - имена одного или нескольких полей, создаваемых в новой таблице. Таблица должна содержать хотя бы одно поле;

тип - тип данных поля в новой таблице;

размер - размер поля в знаках (только для текстовых и двоичных полей);

индекс_1, индекс_2 - предложение CONSTRAINT , предназначенное для создания простого индекса;

составной_индекс - предложение CONSTRAINT , предназначенное для создания составного индекса.

Дополнительные сведения:

•  Если для поля добавлено ограничение NOT NULL , то при добавлении новых записей это поле должно содержать допустимые данные.

•  Предложение CONSTRAINT устанавливает различные ограничения на поле и может быть использовано для определения ключа. Кроме того, для создания ключа или дополнительного индекса для существующей таблицы можно использовать инструкцию CREATE INDEX.

•  Создаваемая временная ( TEMPORARY ) таблица будет доступна только в том сеансе, котором эта таблица была создана. По завершении данного сеанса она автоматически удаляется.

Например, инструкция

TABLE Разделы ( Код _ раздела INTEGER NOT NULL, Название TEXT(30) NOT NULL);

создаст таблицу с двумя полями: целочисленным и текстовым.

Предложение CONSTRAINT .

Назначение: создание или удаление индексов в инструкциях CREATE TABLE и ALTER TABLE .

Существуют два типа предложений CONSTRAINT : одно для создания простого индекса (по одному полю), а второе для создания составного индекса (по нескольким полям).

Синтаксис предложения CONSTRAINT для создания простого индекса:

CONSTRAINT имя { PRIMARY KEY | UNIQUE | NOT NULL |

REFERENCES внешняя_таблица [(внешнее_поле_1, внешнее_поле_2)]

[ ON UPDATE CASCADE | SET NULL ]

[ ON DELETE CASCADE | SET NULL ]}

Синтаксис предложения CONSTRAINT для создания составного индекса:

CONSTRAINT имя

{ PRIMARY KEY ( ключевое _1[, ключевое _2 [, ...]]) |

UNIQUE (уникальное_1[, уникальное_2 [, ...]]) |

NOT NULL (непустое_1[, непустое_2 [, ...]]) |

FOREIGN KEY [ NO INDEX ] ( ссылка _1[, ссылка _2 [, ...]])

REFERENCES внешняя_таблица [(внешнее_поле_1 [, внешнее_поле_2 [, ...]])]

[ ON UPDATE CASCADE | SET NULL ]

[ ON DELETE CASCADE | SET NULL ]}

Аргументы предложения CONSTRAINT :

имя - имя создаваемого индекса;

ключевое_1, ключевое_2 - имена одного или нескольких полей, которые следует обозначить как ключевые;

уникальное_1, уникальное_2 - имена одного или нескольких полей, которые следует включить в уникальный индекс;

непустое_1, непустое_2 - имена одного или нескольких полей, в которых запрещаются значения Null ;

ссылка_1, ссылка_2 - имена одного или нескольких полей, включенных во внешний ключ, которые содержат ссылки на поля в другой таблице;

внешняя_таблица - имя внешней таблицы, которая содержит поля, указанные с помощью аргумента внешнее_поле;

внешнее_поле_1, внешнее_поле_2 - имена одного или нескольких полей внешней таблицы, указанные с помощью ссылки_1 и ссылки_2. Если адресуемое поле является ключом внешней таблицы, данное предложение можно опустить.

Предложение CONSTRAINT позволяет создавать для поля индекс одного из описанных ниже типов:

•  Для создания уникального индекса используется зарезервированное слово UNIQUE . Это означает, что в таблице не может быть двух записей, имеющих одно и то же значение в этом поле. Уникальный индекс создается для любого поля или любой группы полей. Если в таблице определен составной уникальный индекс, то комбинация значений включенных в него полей должна быть уникальной для каждой записи таблицы, хотя отдельные поля и могут иметь совпадающие значения.

•  Для создания ключа таблицы, состоящего из одного или нескольких полей, используется зарезервированные слова PRIMARY KEY . Все значения ключа таблицы должны быть уникальными и отличаться от значения Null . Кроме того, в таблице может быть только один ключ.

Примечание. Зарезервированные слова PRIMARY KEY нельзя использовать при создании индекса в таблице, в которой уже определен ключ; в противном случае возникнет ошибка.

•  Для создания внешнего ключа используются зарезервированные слова FOREIGN KEY . Если ключ внешней таблицы состоит из нескольких полей, необходимо использовать предложение CONSTRAINT , предназначенное для создания составного индекса. При этом следует перечислить все поля, содержащие ссылки на поля во внешней таблице, а также указать имя внешней таблицы и имена полей внешней таблицы, на которые ссылаются поля, перечисленные выше, причем в том же порядке. Если адресуемые поля являются ключами внешней таблицы, указывать эти поля не следует. Ограничения для внешних ключей определяют конкретные действия, выполняемые в случае изменения значения соответствующего ключа:

Например, инструкция

CREATE TABLE Книги (Код_книги TEXT (7) NOT NULL CONSTRAINT ключ2 PRIMARY KEY , Раздел TEXT (5) NOT NULL , Автор TEXT (40) NOT NULL , Название TEXT (50) NOT NULL );

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

Инструкция

CREATE TABLE Выдача_возврат (Код_книги TEXT (7) NOT NULL , Код_читателя TEXT (5) NOT NULL , Дата_выдачи DATETIME NOT NULL , Дата_возврата DATETIME , CONSTRAINT Ключ4 PRIMARY KEY (Код_книги, Дата_выдачи));

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

Инструкция ALTER TABLE .

Назначение: изменение структуры таблицы, созданной с помощью инструкции CREATE TABLE .

Синтаксис:

ALTER TABLE таблица { ADD { COLUMN поле тип [(размер)] [ NOT NULL ]

[ CONSTRAINT индекс ] | ALTER COLUMN тип поля [( размер )] |

CONSTRAINT составной _ индекс } |

DROP { COLUMN поле | CONSTRAINT имя _ индекса } }

Аргументы инструкции ALTER TABLE :

таблица - имя изменяемой таблицы;

поле - имя поля, добавляемого в таблицу или заменяемого в таблице или удаляемого из нее;

тип - тип данных поля;

размер - размер поля в знаках (только для текстовых и двоичных полей);

индекс - индекс для поля;

составной_индекс - описание составного индекса, добавляемого к таблице;

имя_индекса - имя составного индекса, который следует удалить.

С помощью инструкции ALTER TABLE существующую таблицу можно изменить несколькими способами:

•  Добавить новое поле в таблицу с помощью зарезервированных слов ADD COLUMN . В этом случае необходимо указать имя поля, его тип и (для текстовых и двоичных полей) необязательный размер. Например, инструкция

ALTER TABLE Книги ADD COLUMN Год INTEGER NOT NULL;

добавит в таблицу Книги целочисленное поле Год .

•  Изменить тип существующего поля с помощью зарезервированных слов ALTER COLUMN . В этом случае необходимо указать имя поля, его тип и (для текстовых и двоичных полей) необязательный размер. Например, инструкция ALTER TABLE Разделы ALTER COLUMN Код_раздела TEXT (5);

позволит в таблице Разделы изменить тип поля Код (первоначально определенный как INTEGER ), переопределив это поле как текстовое.

•  Добавить составной индекс с помощью зарезервированных слов ADD CONSTRAINT .

•  Удалить поле с помощью зарезервированных слов DROP COLUMN . В этом случае необходимо указать только имя поля. Например, инструкция

ALTER TABLE Книги DROP COLUMN Год ;

удалит из таблицы Книги поле Год .

•  Удалить составной индекс с помощью зарезервированных слов DROP CONSTRAINT . В этом случае необходимо указать только имя составного индекса, следующее за зарезервированным словом CONSTRAINT .

Инструкция CREATE INDEX .

Назначение: создание нового индекса для существующей таблицы.

Синтаксис:

CREATE [ UNIQUE ] INDEX индекс

ON таблица (поле [ ASC | DESC ][, поле [ ASC | DESC ], ...])

[ WITH { PRIMARY | DISALLOW NULL | IGNORE NULL }]

Аргументы:

индекс - имя создаваемого индекса;

таблица - имя существующей таблицы, для которой создается индекс;

поле - имена одного или нескольких полей, включаемых в индекс. Для создания простого индекса (состоящего из одного поля) имя поля в круглых скобках вводится сразу после имени таблицы. Для создания составного индекса (состоящего из нескольких полей) перечисляются имена всех этих полей. Для расположения элементов индекса в убывающем порядке используется зарезервированное слово DESC ; в противном случае будет принят порядок по возрастанию.

Дополнительные сведения:

•  Зарезервированное слово UNIQUE используется для запрета совпадения значений индексированных полей в разных записях.

•  Необязательное предложение WITH позволяет задать условия на значения. Например:

•  С помощью параметра DISALLOW NULL запретить значения Null в индексированных полях новых записей.

•  С помощью параметра IGNORE NULL запретить включение в индекс записей, имеющих значения Null в индексированных полях.

•  С помощью зарезервированного слова PRIMARY назначить индексированные поля ключом. Такой индекс по умолчанию является уникальным, следовательно, зарезервированное слово UNIQUE можно опустить. Зарезервированное слово PRIMARY нельзя использовать при создании нового индекса в таблице, в которой уже определен ключ; в противном случае возникнет ошибка.

Например, инструкция

CREATE INDEX Ключ1 ON Разделы(Код_раздела) WITH PRIMARY ;

определит в таблице Разделы поле Код_раздела как ключевое.

Инструкция

CREATE INDEX Индекс ON Книги(Автор);

создаст в таблице Книги индекс по полю Автор .

Инструкция DROP .

Назначение: удаление таблицы, процедуры, представления из базы данных или удаление индекса из таблицы.

Синтаксис:

DROP { TABLE таблица | INDEX индекс ON таблица | PROCEDURE процедура | VIEW представление}

Аргументы:

таблица - имя таблицы, которую следует удалить или из которой следует удалить индекс;

процедура - имя удаляемой процедуры;

представление - имя удаляемого представления;

индекс - имя индекса, удаляемого из таблицы.

Например, инструкция

DROP INDEX Индекс ON Книги;

удалит из таблицы Книги индекс по полю Автор .

Инструкция

DROP TABLE Книги;

удалит из базы данных таблицу Книги .

up