logo
Основы языка SQL

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

Для создания таблицы используется оператор CREATE TABLE, имеющий в стандарте SQL92 следующее формальное описание:

CREATE [ { GLOBAL | LOCAL } ] TEMPORARY]

TABLE имя_таблицы

( { column | [table_constraint] } . , ..

[ ON COMMIT { DELETE | PRESERVE} ROWS ] );

column определяется как:

имя_поля {domain | datatype [size]}

[column_constraint:]

[ DEFAULT default_value ]

[ COLLATE collate_value ]

Фразы GLOBAL TEMPORARY или LOCAL TEMPORARY указывают на создание временной таблицы.

Фраза ON COMMIT может быть указана только для временных таблиц. По умолчанию для временных таблиц подразумевается фраза ON COMMIT DELETE ROWS.

После имени таблицы в круглых скобках через запятую указывается список полей (называемых также столбцами) и ограничений. Каждое поле имеет имя и тип (datatype). Тип может быть определен как любой допустимый тип языка SQL или как домен. Например, язык SQL допускает такие типы как : integer, char(число_символов), varchar(число_символов), int, smallint, float, date.

Фраза DEFAULT определяет значение по умолчанию. Это значение имеет более высокий приоритет, чем значение по умолчанию, указанное в домене (если вместо типа данных используется домен).

Ограничения для таблицы (table_constraint) и ограничения для столбца (column_constraint), называемые также ограничениями целостности, накладывают определенные условия на вводимые в таблицу данные.

Ограничения для столбца указываются непосредственно после описания столбца, а ограничения для таблицы - через запятую после описания любого столбца.

В стандарте SQL92 ограничения должны иметь имена, которые генерируются СУБД. В наиболее продвинутых БД, в частности Oracle, доступ к ограничениям возможен посредством служебных таблиц словаря базы данных и дополнительного набора команд языка SQL.

Ограничения для столбца могут указываться следующими фразами:

Ограничения для таблицы могут указываться следующими фразами:

Стандарт SQL92 позволяет устанавливать режим контроля ограничений как перед выполнением каждого SQL-оператора, так и в конце текущей транзакции. В последнем случае допускается нарушение ограничения целостности внутри транзакции. Этот режим очень полезен для внесения данных в таблицы, связанные ограничением REFERENCES.