Оператор создания таблицы
База данных обычно содержит несколько таблиц, а также и индексы и некоторые другие информационные объекты.
SQL оперирует с данными, представленными в виде таблиц. Каждая таблица содержит множество строк. Различают базовые таблицы – таблицы, определенные с помощью их описания на языке описания данных, и производные таблицы, получаемые из одной (или нескольких других) таблицы путем выполнения некоторого запроса. Базовые таблицы бывают постоянные или временные. Если создается временная таблица, то используется параметр TEMPORARY. В этом случае при определении таблицы должны быть указаны дополнительные параметры GLOBAL или LOCAL.
Таблица описывается с помощью оператора CREATE TABLE. Таблица определяется путем задания содержащихся в ней столбцов. Все значения в столбце имеют один и тот же тип данных. При описании таблиц могут задаваться ограничения целостности данных.
Следующий оператор создает новую таблицу в существующей БД. Упрощенный синтаксис оператора имеет вид:
CREATE TABLE <таблица>
( <определение столбца>
[, {<определение столбца> | <ограничение таблицы>}, …]);
Здесь <таблица> - уникальное внутри БД имя, присваиваемое таблице,
<определение столбца> - описание столбца таблицы, которое может основываться на ранее определенном домене, а также содержать ограничения целостности, предъявляемые к вводимым в столбец значениям. Таблица должна содержать хотя бы один столбец.
<ограничение таблицы> - описание ограничения целостности, предъявляемого к сочетанию значений, введенных в строку таблицы в нескольких столбцах. В описании таблицы может определяться несколько ограничений таблицы.
В определениях столбцов и в ограничениях таблицы могут также задаваться ограничения ссылочной целостности для поддержки связей между данными в разных таблицах.
Упрощенный синтаксис определения столбца имеет вид:
< определение столбца > = <столбец > {< тип > | <домен >}
[DEFAULT <значение> ]
[NOT NULL]
[ <ограничение столбца>, … ]
Здесь <столбец> - уникальное внутри таблицы имя, присваиваемое столбцу,
{< тип> | <домен>} – тип данных столбца или домен, свойства которого наследует столбец,
DEFAULT, NOT NULL – аналогичны объявлениям, рассмотренным для домена,
<ограничение столбца> - требование, которое должно выполняться для вводимых в столбец значений. Набор видов ограничений столбца имеет вид:
UNIQUE – требование уникальности значений в столбце;
PRIMARY KEY – объявление столбца первичным ключом. Это автоматически накладывает требование уникальности на значения в столбце. Кроме того, для столбца должно быть явно указано требование NOT NULL;
Ограничение столбца представляется в виде ограничений ссылочной целостности и ограничений по значению:
REFERENCES <таблица> [(<столбец>)]
[ON DELETE
{NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
[ON UPDATE
{NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
- ограничение ссылочной целостности.
CASCADE - каскадное удаление или изменение внешних ключей с соответствии с удалением или изменением в главной таблице;
SET DEFAULT – установка некорректных значений внешних ключей в заданное для столбца значение по умолчанию;
SET NULL – очистка позиций некорректных значений внешних ключей путем записи в них значения NULL.
CHECK (<предикат>) – ограничивающее условие, проверяемое при вводе или изменении значения в столбце. Предикат использует значения столбцов в выражении для вычисления значения
Простыми формами задания условия являются:
<столбец> <оператор сравнения > <значение>,
<столбец > [NOT] BETWEEN <значение> AND <значение>,
<столбец > [NOT] IN (<список значений>),
<столбец > IS [NOT] NULL.
Предикат может принимать значения TRUE, FALSE или UNKNOWN. Ограничение считается нарушенным, когда предикат принимает значение FALSE.
Более сложные условия задаются с использованием кванторов и операторов выборки. Также как для домена простые условия могут соединяться в более сложные с помощью логических функций AND, OR и NOT.
Ограничения таблицы аналогичны ограничениям столбца, но предъявляются не к одному столбцу, а к набору столбцов:
PRIMARY KEY (<список столбцов>) – объявление набора столбцов первичным ключом;
UNIQUE (<список столбцов>) – требование уникальности сочетаний значений в наборе столбцов,
FOREIGN KEY (<список столбцов>) REFERENCES <таблица>
ON DELETE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
ON UPDATE {NO ACTION | CASCADE | SET DEFAULT | SET NULL}]
- объявление набора столбцов внешним ключом;
CHECK ( <предикат>) – задание ограничивающего условия, включающего значения из нескольких столбцов.
Ниже приведен пример описания трех связанных таблиц: «Spr_mat» — справочник материалов, «Spr_post» — справочник поставщиков и «Post» - таблица, содержащая информацию о поставках. При включении в базу данных информации о конкретной поставке должно проверяться наличие вводимых значений кода материала (kod_mat) и кода поставщика (kod_post) в соответствующих справочниках.
CREATE TABLE spr_mat
(kod_mat CHAR(3) NOT NULL PRIMARY KEY,
naim_mat CHAR (30) NOT NULL UNIQUE);
CREATE TABLE spr_post
(kod_post CHAR(5) NOT NULL,
naim_post CHAR (30) NOT NULL,
PRIMARY KEY (kod_post),
UNIQUE (naim_post));
CREATE TABLE post
(kod_post CHAR(5) NOT NULL,
kod_mat CHAR(3) NOT NULL,
data_post DATE NOT NULL,
kolv NUMERIC NOT NULL,
PRIMARY KEY (kod_post, kod_mat, data_post),
FORIGN KEY (kod_mat) REFERENCES spr_mat (kod_mat),
FORIGN KEY (kod_post) REFERENCES spr_post (kod_post));
Структуру существующей таблицы можно изменять с помощью оператора ALTER TABLE.
ALTER TABLE <имя таблицы>
[ADD [COLUMN] <определение столбца>]
| [ALTER [COLUMN] <имя столбца> <изменяющее действие>]
| [DROP [COLUMN] <имя столбца> RESTRICT | CASCADE]
| [ADD <определение ограничения для таблицы>]
| [DROP CONSTAINT <имя ограничения> RESTRICT | CASCADE];
изменяющее действие::=
[SET DEFAULT <значение по умолчанию>] | [DROP DEFAULT]
Как видно, с помощью оператора ALTER TABLE можно добавить новый столбец в таблицу, изменить определение существующего столбца, добавив/удалив значение по умолчанию, добавить/удалить ограничения целостности, а также удалить столбец из таблицы. При удалении столбца, если будет использован параметр RESTRICT, то в случае наличия каких-либо ссылок на этот столбец (в представлениях, ограничениях, условиях) оператор будет отвергнут. Если же будет использован параметр CASCADE, то все объекты, имеющие ссылки на этот столбец, будут уничтожены.
Оператор ALTER TABLE присутствует не во всех СУБД. Часто реализация этого оператора не полностью соответствует стандарту.
Таблицы могут быть удалены с помощью оператора DROP TABLE.
Дата добавления: 2016-12-27; просмотров: 1906;