- •1.1. Добавление новых записей
- •1.2. Удаление записей
- •1.3. Изменение данных
- •1.4. Проверка ссылочной целостности
- •2. Создание и модификация таблиц
- •2.1. Создание таблиц
- •2.1.1. Ограничения для столбцов
- •2.1.2. Ограничения для таблиц
- •2.1.3. Внешние ключи
- •2.2. Удаление таблиц
- •2.3. Модификация таблиц
- •Список контрольных вопросов:
2.1. Создание таблиц
Создание таблицы производится с помощью оператора CREATE TABLE (создать таблицу) с указанием необходимых параметров. При этом создается постоянная таблица. Чтобы удалить ее из базы данных, требуется выполнить специальный SQL-оператор.
Для создания временной таблицы используется оператор CREATE TEMPORARY TABLE (создать временную таблицу). Временная таблица, в отличие от постоянной, существует только в течение сеанса работы с базой данных, в котором она была создана. Однако временная таблица может быть доступна другим пользователям, как и постоянная таблица. Обычно временные таблицы создаются для представления в них текущих итоговых (отчетных) данных, доступных нескольким пользователям базы данных. Далее приведен синтаксис оператора CREATE:
CREATE [TEMPORARY] TABLE имяТаблицы (
{Столбец1 тип [(размер)] [ограничение_столбца] [, ...] }
{ [ , CONSTRAINT ограничение__таблицы] [, . . . ] }
);
Здесь квадратные и фигурные скобки, в отличие от круглых, не являются элементами синтаксиса. В квадратных скобках заключены необязательные элементы, а в фигурных - элементы, которые могут повторяться.
Для создания таблицы необходимо указать ее имя и определить столбцы. Определение столбца включает его имя и тип. Если указывается длина столбца, то она заключается в круглые скобки после типа. Кроме того, можно указать ограничения для столбца. Все перечисленные элементы определения столбца указываются друг за другом через пробел. Если создаваемая таблица содержит несколько столбцов, то их определения разделяются запятыми. Ограничение может быть определено и для всей таблицы, а не только для ее столбцов. В этом случае используется ключевое слово CONSTRAINT (ограничение), после которого указывается само ограничение.
Только что созданная таблица пуста, т. е. не содержит ни одной записи.
Далее приведен запрос на создание простой таблицы без ограничений:
CREATE TABLE Студент (
ID_студента INTEGER,
ФИО CHAR(20),
Специальность CHAR(15),
Примечание VARCHAR );
Данный запрос создает таблицу Студент, содержащую четыре столбца. Первый столбец целочисленный, а три других - символьные.
Ограничения устанавливаются на данные, которые вводятся в таблицу. Например, на числовой столбец можно наложить ограничение, заключающееся в том, что вводимое число должно находиться в некотором диапазоне. Другой пример ограничения: значение столбца не должно быть неопределенным.
Нередко ограничения устанавливаются и отслеживаются в приложениях, работающих с базами данных. Тем не менее, ограничения могут быть установлены и могут поддерживаться многими современными СУБД. Если вы создаете таблицу посредством SQL, то также имеете возможность задать эти ограничения, а выполнять их будет СУБД. При этом если одна и та же база данных используется несколькими приложениями, то вам придется установить ограничения только один раз, а не столько, сколько имеется приложений.
2.1.1. Ограничения для столбцов
В табл. приведены основные ограничения для столбцов. Однако существуют и более сложные ограничения, которые здесь не рассматриваются.
Примечание: Microsoft Access не поддерживает ключевые слова DEFAULT и CHECK в определениях ограничений.
Рассмотрим в качестве примера создание таблицы Студент (ID_студента, ФИО, Специальность, Примечание). Идентификатор студента (целочисленный столбец ID_студента) должен однозначно идентифицировать запись о студенте, т. е. иметь определенные и уникальные значения. Таким образом, данный столбец должен быть первичным ключом. От столбца ФИО (фамилия, имя и отчество) потребуем, чтобы в нем не было неопределенных значений. Целочисленный столбец Специальность должен содержать номера специальностей, которые не превышают 12. Тогда запрос на создание такой таблицы будет иметь вид:
CREATE TABLE Студент (
ID_студента INTEGER PRIMARY KEY, ФИО CHAR(20) NOT NULL,
Специальность INTEGER CHECK(Специальность < 12),
Примечание VARCHAR
);
Предположим, что данный запрос выполнен. Тогда следующий запроса добавление новой записи в таблицу Студент вызовет сообщение об ошибке и не будет выполнен:
INSERT INTO Студент;
Это произойдет потому, что данный запрос добавляет пустую запись, все столбцы которой содержат значение NULL, и, следовательно, не выполняются ограничения для первых двух столбцов. А следующий запрос, добавляющий в таблицу первую запись и устанавливающий определенные значения для столбцов, не вызовет проблем со стороны СУБД:
INSERT INTO Студент (ID_студента, ФИО, Специальность)
VALUES (1, 'Иванов Иван Иванович', 9);
Попытаемся вслед за данным запросом добавить еще одну запись:
INSERT INTO Студент (ID__студента, ФИО, Специальность)
VALUES (1, 'Петров Петр Петрович', 5);
Данный запрос не будет выполнен из-за нарушения ограничения, наложенного на первый столбец: его значения должны быть не только определенными (отличными от NULL), но и уникальными. Запись можно добавить, если столбцу ID_студента присвоить, например, значение 2.
Ограничения для столбцов можно выразить и иначе - через ограничения доменов. Домен определяется как множество значений. Домен в реляционной теории связывается с атрибутом отношения и, как таковой, определяет некоторое ограничение на этот атрибут (атрибут может принимать значения только из этого домена). В SQL можно создать домен, сначала не связанный ни с какими атрибутами (столбцами), определив для него допустимые значения: тип данных и дополнительные ограничения. Затем этот домен можно задать в качестве ограничений для любого столбца в любой таблице подобно тому, как задаются типы столбцов. Другими словами, домен можно связать с одним или несколькими столбцами различных таблиц. В ряде случаев этот прием очень удобен, особенно если у вас имеется несколько "однотипных" столбцов в различных таблицах базы данных.
Чтобы создать домен, используется такой синтаксис:
CREATE DOMAIN имяДомена типДанных Ограничения;
Например, таблицу Студент (ID_студента, ФИО, Специальность, Примечание) можно определить традиционным образом:
CREATE TABLE Студент (
ID_студента INTEGER PRIMARY KEY,
ФИО CHAR(20) NOT NULL,
Специальность INTEGER CHECK (Специальность < 12),
Примечание VARCHAR );
Однако можно сначала определить домен с именем specDomain, задав для него тип данных и ограничение:
CREATE DOMAIN specDomain INTEGER CHECK (Специальность < 12) ;
Обратите внимание, что в определении домена, пока не связанного ни с каким столбцом какой-либо таблицы, задается тип значений домена и ограничение на эти значения.
С учетом того, что домен specDomain создан, определение таблицы Студент можно задать следующим образом:
CREATE TABLE Студент (
ID_студента INTEGER PRIMARY KEY, ФИО CHAR(20) NOT NULL,
Специальность specDomain,
Примечание VARCHAR );
