ВУЗ: Томский государственный университет систем управления и радиоэлектроники
Категория: Учебное пособие
Дисциплина: Базы данных
Добавлен: 28.11.2018
Просмотров: 10889
Скачиваний: 43
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 – Таблица «Студент» в схеме данных
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 — имена одного или нескольких
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,
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 имя Индекса}},
где таблица — имя изменяемой таблицы; поле — имя поля, добавляемого в таблицу
или удаляемого из нее; тип — тип данных поля; размер — размер поля; индекс —
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],. . .])