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 |
Определяет значение по умолчанию столбца, которое вводится когда не сделано
ни каких других вводов. Значения:
|
|
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);