Оглавление  | Назад  | Вперед

Справочник по инструкциям и функциям InterBase SQL

CREATE TABLE

Описание
Синтаксис
Примеры
Смотри так же

Описание

CREATE TABLE устанавливает новую таблицу, ее столбцы и ограничения целостности в существующей базе данных. Пользователь, который создает таблицу, становится владельцем таблицы и получает полные привилегии для этого, включая возможность предоставления (GRANT) привилегий другим пользователям, триггерам, и сохраненным процедурам.

CREATE TABLE поддерживает несколько опций для определения столбцов:

Предложение COLLATE позволяет указать специфический порядок сортировки для типов данных CHAR, VARCAHR и BLOB-текст. Выбор порядка сортировки ограничен теми которые поддерживаются для данной кодировки столбца, это или кодировка по умолчанию для базы данных в целом или другая установленная в предложении CHARACTER SET как часть определения типа данных. Смотри Language Reference, чтобы получить полный список возможных сортировок.

Атрибут NOT NULL предотвращает ввод NULL или неизвестного значения в столбец. Атрибут NOT NULL проявляется во всех INSERT и UPDATE операциях над столбцом.

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

Для не именованных ограничений, система создает уникальное имя сохраненное в системной таблице RDB$RELATION_CONSTRAINTS.

Обратите внимание: Ограничения не допустимы на выражениях.

Оция EXTERNA FILE создает таблицу, чьи данные постоянно расположены во внешней таблице или файле, а не в базе данных InteBase. Используйте эту опций для:

К началу страницы...

Синтаксис

CREATE TABLE table [EXTERNAL [FILE] "<filespec>"]
(<col_def> [, <col_def> | <tconstraint> ...]);

<col_def> = col {datatype | COMPUTED [BY] (<expr>) | domain}
[DEFAULT {literal | NULL | USER}]
  [NOT NULL] [<col_constraint>]
  [COLLATE collation]

Обратите внимание: Предложение COLLATE не может быть определено для столбцов BLOB.

<datatype> = {
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} [<array_dim>]
  | {DECIMAL | NUMERIC} [(precision [, scale])] [<array_dim>]
  | DATE [<array_dim>]
  | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
    [(int)] [<array_dim>] [CHARACTER SET charname]
  | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
    [VARYING] [(int)] [<array_dim>]
  | BLOB [SUB_TYPE {int | subtype_name}] [SEGMENT SIZE int]
    [CHARACTER SET charname]
  | BLOB [(seglen [, subtype])]
  }

<array_dim> = [x:y [, x:y ...]]

Обратите внимание: Внешние скобки (выделены жирным) должны быть включены в объявление массивов.

<expr> = Допустимое выражение SQL, которое возвращает единственное значение.

<col_constraint> = [CONSTRAINT constraint] <constraint_def>
[<col_constraint>]

<constraint_def> = {UNIQUE | PRIMARY KEY
| CHECK (<search_condition>)
  | REFERENCES other_table [(other_col [, other_col ...])]}

<tconstraint> = CONSTRAINT constraint <tconstraint_def>
[<tconstraint>]

<tconstraint_def> = {{PRIMARY KEY | UNIQUE} (col [, col ...])
| FOREIGN KEY (col [, col ...]) REFERENCES other_table
  | CHECK (<search_condition>)}

<search_condition> =
{<val> <operator> {<val> | (<select_one>)}
  | <val> [NOT] BETWEEN <val> AND <val>
  | <val> [NOT] LIKE <val> [ESCAPE <val>]
  | <val> [NOT] IN (<val> [, <val> ...] | <select_list>)
  | <val> IS [NOT] NULL
  | <val> {[NOT] {= | < | >} | >= | <=}
    {ALL | SOME | ANY} (<select_list>)
  | EXISTS (<select_expr>)
  | SINGULAR (<select_expr>)
  | <val> [NOT] CONTAINING <val>
  | <val> [NOT] STARTING [WITH] <val>
  | (<search_condition>)
  | NOT <search_condition>
  | <search_condition> OR <search_condition>
  | <search_condition> AND <search_condition>}

<val> = {
col [<array_dim>] | <constant> | <expr> | <function>
   | NULL | USER | RDB$DB_KEY
  } [COLLATE collation]

<constant> = num | "string" | charsetname "string"

<function> = {
COUNT (* | [ALL] <val> | DISTINCT <val>)
  | SUM ([ALL] <val> | DISTINCT <val>)
  | AVG ([ALL] <val> | DISTINCT <val>)
  | MAX ([ALL] <val> | DISTINCT <val>)
  | MIN ([ALL] <val> | DISTINCT <val>)
  | CAST (<val> AS <datatype>)
  | UPPER (<val>)
  | GEN_ID (generator, <val>)
  }

<operator> = {= | < | > | <= | >= | !< | !> | <> | !=}

<select_one> = SELECT (выбор) на одном столбце, который возвращает точно одно значение.

<select_list> = SELECT на одном столбце, который возвращает ноль или более значений.

<select_expr> = SELECT на списке значений, который возвращает ноль или более значений.
Аргумент Описание
table Имя для таблицы. Имя таблицы должно быть уникальным среди имен таблиц и процедур в базе данных.
EXTERNAL [FILE] "<filespec>" Объявляет что данные для создаваемой таблицы, постоянно располагаются во внешней к базе данных таблице или файле.
col Имя для столбца таблицы, должно быть уникальным именем в таблице.
<datatype> SQL тип данных столбца.
COMPUTED [BY] (<expr>) Базирует определение столбца на выражении. Выражение должно возвращать одиночное значение, и не иметь тип массива или возвращать массив.
<expr> - любое арифметическое выражение допустимое для типа типа данных столбца.
domain Имя существующего домена.
COLLATE collation Определяет порядок сортировки для столбца. Порядок сортировки на уровне столбца отменяет порядок сортировки определенный на уроне домена
DEFAULT Определяет значение по умолчанию столбца, которое вводится когда не сделано ни каких других вводов. Значения:
  • literal: Вставляется специфическая строка, числовое значение или дата.
  • NULL: Вводится значение NULL.
  • USER: Вводится имя текущего пользователя. Столбец должен быть совместимого текстового типа, для использования значения по умолчанию.
Установка значению по умолчанию на уровне столбца отменяет значение по умолчанию на уровне домена
CONSTRAINT constraint Помещает именованное ограничение на таблицу или столбец. Ограничение это правило применяемое к структуре или контексту таблицы. Если это предложение опущено, InterBase создает системное имя для ограничения.

К началу страницы...

Примеры

Следующая инструкция создает одиночную таблицу с PRIMARY KEY:

CREATE TABLE COUNTRY
  (COUNTRY COUNTRYNAME NOT NULL PRIMARY KEY,
  CURRENCY VARCHAR(10) NOT NULL);

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

CREATE TABLE STOCK
  (MODEL SMALLINT NOT NULL UNIQUE,
  MODELNAME CHAR(10) NOT NULL,
  ITEMID INTEGER NOT NULL,
  CONSTRAINT MOD_UNIQUE UNIQUE (MODELNAME, ITEMID));

Следующая инструкция иллюстрирует PRIMARY KEY, FOREGEN KEY и CHECK ограничения на уровне таблицы. Ограничение PRYMARY KEY базируется на трех столбцах. Этот пример так же иллюстрирует создание столбца типа массив VARCHAR.

CREATE TABLE JOB
  (JOB_CODE JOBCODE NOT NULL,
  JOB_GRADE JOBGRADE NOT NULL,
  JOB_COUNTRY COUNTRYNAME NOT NULL,
  JOB_TITLE VARCHAR(25) NOT NULL,
  MIN_SALARY SALARY NOT NULL,
  MAX_SALARY SALARY NOT NULL,
  JOB_REQUIREMENT BLOB(400,1),
  LANGUAGE_REQ VARCHAR(15) [5],
  PRIMARY KEY (JOB_CODE, JOB_GRADE, JOB_COUNTRY),
  FOREIGN KEY (JOB_COUNTRY) REFERENCES COUNTRY (COUNTRY),
  CHECK (MIN_SALARY < MAX_SALARY));

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

CREATE TABLE SALARY_HISTORY
  (EMP_NO EMPNO NOT NULL,
  CHANGE_DATE DATE DEFAULT "NOW" NOT NULL,
  UPDATER_ID VARCHAR(20) NOT NULL,
  OLD_SALARY SALARY NOT NULL,
  PERCENT_CHANGE DOUBLE PRECISION
    DEFAULT 0
    NOT NULL
    CHECK (PERCENT_CHANGE BETWEEN -50 AND 50),
  NEW_SALARY COMPUTED BY
    (OLD_SALARY + OLD_SALARY * PERCENT_CHANGE / 100),
  PRIMARY KEY (EMP_NO, CHANGE_DATE, UPDATER_ID),
  FOREIGN KEY (EMP_NO) REFERENCES EMPLOYEE (EMP_NO));

В следующей инструкции первый столбец сохраняет тип сортировки установленный по умолчанию для базы данных. Второй столбец имеет отличный тип сортировки, а определение третьего столбца включает, и кодировку и порядок сортировки.

CREATE TABLE BOOKADVANCE
  (BOOKNO CHAR(6),
  TITLE CHAR(50) COLLATE ISO8859_1,
  EUROPUB CHAR(50) CHARACTER SET ISO8859_1 COLLATE FR_FR);

К началу страницы...

Смотри так же:

К началу страницы...


Оглавление  | Назад  | Вперед