Файл: Базы данных - уч. пособие.pdf

Добавлен: 28.11.2018

Просмотров: 10889

Скачиваний: 43

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

5.1 Язык SQL

91

Рис. 5.1 – Схематичное представление SQL-запроса

Если для поля добавлено ограничение NOT NULL, то при добавлении новых

записей это поле не должно содержать несуществующих (NULL) данных.

Синтаксис:

CREATE TABLE таблица (поле_1 тип [(размер)]
[NOT NULL] [индекс_1] [, поле_2 тип [(размер)]
[NOT NULL] [индекс_2] [,. . .]] [, CONSTRAINT составной Индекс [,. . .]]),

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

В следующем примере представлено создание новой таблицы «Студент».

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.1

. . . . . . . . . . . . . . . . . . . . .

CREATE TABLE Студент (Код_студента AUTOINCREMENT PRIMARY KEY,

Номер_зачетной_книжки INTEGER, ФИО_студента TEXT (50), Место_рождения
TEXT (50));

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

В результате выполнения этого запроса в БД СУБД MS Access будет создана

таблица «Студент», представленная в схеме БД следующим образом (рис. 5.2).

Рис. 5.2 – Таблица «Студент» в схеме данных


background image

92

Глава 5. Языки управления и манипулирования данными

На рисунке 5.3 таблица «Студент» представлена в режиме конструктора таб-

лиц. Отметим, что в таблицу добавлен суррогатный первичный ключ «Код_студен-
та», имеющий тип данных «Счетчик» или AUTOINCREMENT, — этот тип данных
специально используется для автоматического формирования значений суррогат-
ных первичных ключей — атрибут, определенный на таком типе данных, будет при-
нимать уникальные числовые значения при создании новой записи в таблице.

Рис. 5.3 – Таблица «Студент» в режиме конструктора таблиц

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Предложение CONSTRAINT используется в инструкциях ALTER
TABLE и CREATE TABLE для создания или удаления индексов.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Индексы — это специальные объекты в БД, создаваемые с целью повышения

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

Синтаксис:

• простой индекс:

CONSTRAINT имя {PRIMARY KEY | UNIQUE | NOT NULL]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

• составной индекс:

CONSTRAIN T имя
{PRIMARY KEY (ключевое_1 [, ключевое_2 [,. . .]]) |
UNIQUE (уникальное_1 [, уникальное_2 [,. . .]]) |
NOT NULL (непустое_1 [, непустое_2 [,. . .]]) |
FOREIGN KEY (ссылка_1 [, ссылка_2 [,. . .]])
REFERENCES внешняя Таблица [(внешнее Поле_1 [, внешнее Поле_2 [,. . .]])]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]},

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


background image

5.1 Язык SQL

93

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

ON UPDATE, ON DELETE обеспечивают автоматическое указание каскадного

обновления связанных полей и каскадного удаления связанных записей в схеме БД
(CASCADE) или обнуление соответствующих значений полей, являющихся внеш-
ними ключами (SET NULL). Данные ключевые слова актуальны, если в СУБД MS
Access включить поддержку ANSI SQL, в противном случае в результате выполне-
ния запроса будет выдана ошибка синтаксиса.

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

описанных ниже типов:

1) уникальный индекс, создаваемый с помощью зарезервированного слова

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

2) ключ таблицы, состоящий из одного или нескольких полей, использующий

зарезервированные слова PRIMARY KEY. Все значения ключа таблицы
должны быть уникальными и не значениями NULL. Кроме того, в таблице
может быть только один ключ.

Для создания внешнего ключа можно использовать зарезервированную кон-

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

В следующем примере создается таблица «Задолженность_за_обучение» с внеш-

ним ключом «Код_студента», связанным с полем «Код_студента», в таблице «Сту-
дент».

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.2

. . . . . . . . . . . . . . . . . . . . .

CREATE TABLE Задолженность_за_обучение
(Код_задолженности AUTOINCREMENT PRIMARY KEY,


background image

94

Глава 5. Языки управления и манипулирования данными

Код_студента INTEGER, Сумма_задолженности MONEY,
CONSTRAINT f1_i FOREIGN KEY (Код_студента)
REFERENCES Студент (Код_студента)
ON UPDATE CASCADE ON DELETE CASCADE);

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Внешний вид схемы БД, состоящей из таблиц «Студент» и «Задолженность_за_

обучение», представлен на рисунке 5.4. Здесь необходимо отметить, что дополни-
тельные ключевые слова ON UPDATE CASCADE ON DELETE CASCADE позво-
лили обеспечить автоматическое указание каскадного обновления связанных полей
и каскадного удаления связанных записей в схеме БД.

Рис. 5.4 – Схема данных после создания таблицы «Задолженность_за_обучение»

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

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Инструкция ALTER TABLE изменяет структуру таблицы, со-
зданной с помощью инструкции CREATE TABLE.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Синтаксис:

ALTER TABLE таблица {ADD {COLUMN поле тип[(размер)] [NOT NULL]
[CONSTRAINT индекс] | CONSTRAINT составной Индекс} |
DROP {COLUMN поле I CONSTRAINT имя Индекса}},

где таблица — имя изменяемой таблицы; поле — имя поля, добавляемого в таблицу
или удаляемого из нее; тип — тип данных поля; размер — размер поля; индекс —


background image

5.1 Язык SQL

95

индекс для поля; составной Индекс — описание составного индекса, добавляемого
к таблице; имя Индекса — имя составного индекса, который следует удалить.

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

нить несколькими способами:

1) добавить новое поле в таблицу с помощью предложения ADD COLUMN.

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

2) добавить составной индекс с помощью зарезервированных слов ADD CON-

STRAINT;

3) удалить поле с помощью зарезервированных слов DROP COLUMN. В этом

случае необходимо указать только имя поля;

4) удалить составной индекс с помощью зарезервированных слов DROP CON-

STRAINT. В этом случае указывается только имя составного индекса, сле-
дующее за зарезервированным словом CONSTRAINT.

В следующем примере в таблицу «Студент» будет добавлено поле Дата_рождения

(рис. 5.5).

. . . . . . . . . . . . . . . . . . . . . .

Пример 5.3

. . . . . . . . . . . . . . . . . . . . .

ALTER TABLE Студент ADD COLUMN Дата_рождения date;

Рис. 5.5 – Результат добавления поля «Дата_рождения» в таблицу «Студент»

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Создание индекса с помощью инструкции CREATE INDEX

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CREATE INDEX создает новый индекс для существующей таб-
лицы.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Синтаксис команды:

CREATE [UNIQUE] INDEX индекс
ON таблица (поле [ASC | DESC][, поле [ASC | DESC],. . .])