Содержание



CREATE TABLE

Формат

CREATE TABLE <имя таблицы>
[EXTERNAL [FILE] '<спецификация файла>']
(<определение столбца>
[, <определение столбца> | <ограничение таблицы>]...);

<определение столбца> ::= <имя столбца>
{ <тип данных>
| <имя домена>
| COMPUTED [BY] (<выражение>)
| GENERATED ALWAYS AS (<выражение>)
}
[DEFAULT {<литерал> | NULL}]
[NOT NULL]
[<ограничение столбца>]
[COLLATE <порядок сортировки>]

<тип данных> ::=
{ SMALLINT [<размерность массива>]
| INTEGER [<размерность массива>]
| BIGINT [<размерность массива>]
| FLOAT [<размерность массива>]
| DOUBLE PRECISION [<размерность массива>]
| {DECIMAL | NUMERIC} [(<точность> [, <масштаб>])]
[<размерность массива>]
| {DATE | TIME | TIMESTAMP} [<размерность массива>]
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(<целое>)] [CHARACTER SET <набор символов>]
[<размерность массива>]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [(<целое>)]}
[<размерность массива>]
| BLOB [SUB_TYPE {<номер подтипа> | <имя подтипа>}]
[SEGMENT SIZE <целое>]
[CHARACTER SET <набор символов>]}
| BLOB [(<размер сегмента> [, <номер подтипа>])]
}
<размерность массива> ::= [<целое 1>:<целое 2>
[, <целое 1>:<целое 2>]...]


<ограничение столбца> ::= [CONSTRAINT <имя ограничения>]
{ UNIQUE [<предложение USING>]
| PRIMARY KEY [<предложение USING>]
| REFERENCES <имя таблицы> [(<имя столбца>)]
[<предложение USING>]
[ON DELETE
{ NO ACTION
| CASCADE
| SET DEFAULT
| SET NULL
}
]
[ON UPDATE
{ NO ACTION
| CASCADE
| SET DEFAULT
| SET NULL
}
]
| CHECK (<условие столбца>)
}
<предложение USING> ::= USING
[ASC[ENDING] | DESC[ENDING]] INDEX <имя индекса>


<условие столбца> ::=
{ <значение> <оператор сравнения>
{<значение> | (<выбор одного>)}
| <значение> [NOT] IN
(<значение> [, <значение>]... | <поиск одного>})
| <значение> [NOT] BETWEEN <значение> AND <значение>
| <значение> [NOT] LIKE <значение> [ESCAPE '<символ>']
| <значение> IS [NOT] NULL
| <значение> IS [NOT] DISTINCT FROM <значение>
| <значение> <оператор сравнения>
{ALL | SOME | ANY} (<поиск одного>)
| EXISTS (<поиск многих>)
| SINGULAR (<поиск многих>)
| <значение> [NOT] CONTAINING <значение>
| <значение> [NOT] STARTING [WITH] <значение>
| (<условие столбца>)
| NOT <условие столбца>
| <условие столбца> OR <условие столбца>
| <условие столбца> AND <условие столбца>
}

Описание

Оператор CREATE TABLE создает новую таблицу в базе данных.

Имя таблицы должно быть уникальным среди имен таблиц базы данных, хранимых процедур и представлений, описанных в этой базе данных.

Таблица может содержать, по меньшей мере, один столбец и произвольное количество ограничений таблицы. Таблица может не храниться в базе данных, все ее строки могут помещаться в отдельный текстовый файл, находящийся вне базы данных, заданный предложением EXTERNAL FILE в операторе создания таблицы. В таблицах, которые хранятся во внешних файлах, могут быть описаны любые типы данных, кроме BLOB. Недопустимо также использование массивов с любым типом данных. По отношению к таблицам, хранящимся во внешних файлах, допустимы только операции добавления новых строк (INSERT) и выборки (SELECT) данных. Операции же изменения существующих данных (UPDATE) или удаления строк такой таблицы (DELETE)не могут быть выполнены. Возможность использования для таблиц внешних файлов зависит от установки значения параметра ExternalFileAccess в файле конфигурации firebird.conf.

Все столбцы должны иметь имя, уникальное в данной таблице. Для столбца обязательно должен быть указан либо тип данных, либо имя домена, характеристики которого будут скопированы в этот столбец, либо должно быть указано, что столбец является вычисляемым (COMPUTED BY или GENERATED ALWAYS AS).

Для столбца с любым типом данных, кроме BLOB, можно указать размерность массива, если этот столбец является массивом. При описании символьного столбца и столбца с типом данных BLOB можно в предложении CHARACTER SET указать набор символов, если требуется набор, отличный от набора символов по умолчанию, установленного для базы данных. В предложении COLLATE можно задать порядок сортировки (для типа данных BLOB использование COLLATE недопустимо).

Если вместо типа данных задается имя домена, то все его характеристики копируются для этого столбца. Вычисляемый столбец задается предложением COMPUTED BY. Значение такого столбца не хранится в таблице, а вычисляется каждый раз при выборке данных. Необязательное предложение DEFAULT определяет значение по умолчанию для столбца — то значение, которое будет присвоено столбцу, если при помещении новой строки в таблицу в операторе INSERT не указан данный столбец и его значение. Значением по умолчанию может быть литерал, пустое значение NULL. Литералом может быть любая самоопределенная константа соответствующего типа, предварительно определенный литерал или контекстная переменная. Если значение по умолчанию явно не устанавливается, то подразумевается пустое значение, NULL. Использование выражений в значении по умолчанию недопустимо. Необязательное предложение NOT NULL указывает, что столбцу не может быть присвоено пустое значение. Ограничение столбца записывается после определения других характеристик столбца.

Существует четыре вида ограничений столбца: первичный ключ (PRIMARY KEY), уникальный ключ (UNIQUE), внешний ключ(REFERENCES) и ограничение условия столбца CHECK.

Необязательное предложение CONSTRAINT задает имя ограничения. Если задано это предложение, то система автоматически строит индекс с этим именем для поддержания соответствующего ограничения (если в ограничении не было задано предложение USING). Иначе ограничению и индексу присваивается системное имя.

Предложение USING позволяет задать имя индекса для поддержания соответствующего ограничения и указать его упорядоченность — по возрастанию значений реквизитов (ASCENDING) или по убыванию их значений (DESCENDING). Если упорядоченность не задана, то предполагается ASCENDING, по возрастанию. Предложение USING может быть использовано для ограничений первичного ключа (PRIMARY KEY), уникального ключа (UNIQUE) и внешнего ключа (REFERENCES). Упорядоченность индекса внешнего ключа должна соответствовать упорядоченности индекса первичного (уникального) ключа, на который ссылается данный внешний ключ.

:!: Для ограничения CHECK предложение USING не применимо.

Предложение ON DELETE определяет, что произойдет с записями подчиненной таблицы при удалении соответствующей строки главной таблицы:

Предложение ON UPDATE определяет, что произойдет с записями подчиненной таблицы при изменении значения первичного/уникального ключа в строке главной таблицы;

Ограничение CHECK определяет условие, которому должно удовлетворять значение, помещаемое в данный столбец. Это логическое выражение, которое может возвращать значения TRUE (истина), FALSE (ложь) и UNKNOWN (неопределенное, неизвестное значение). Это условие используется при добавлении в таблицу новой строки (оператор INSERT) и при изменении существующего значения столбца таблицы (операторы UPDATE или UPDATE OR INSERT).

Оператором в этом условии является оператор сравнения.

<оператор сравнения> ::= = | < | > | <= | >= | !< | !> | <> | != | ^= | ^> | ^<

В операторе сравнения символы «!» и «^» означают отрицание. Оператор может быть применен к любому типу данных, за исключением типа данных BLOB. Допустимо сравнение однотипных или близких типов данных. При необходимости следует выполнить явное преобразование типа данных операндов сравнения, используя функцию CAST.

Пример

CREATE TABLE EMPLOYEE
      (EMPNO       CHAR(6)         NOT NULL,
       FIRSTNME    VARCHAR(12)     NOT NULL,
       MIDINIT     CHAR(1)         NOT NULL,
       LASTNAME    VARCHAR(15)     NOT NULL,
       WORKDEPT    CHAR(3)                 ,
       PHONENO     CHAR(4)                 ,
       HIREDATE    DATE                    ,
       JOB         CHAR(8)                 ,
       EDLEVEL     SMALLINT        NOT NULL,
       SEX         CHAR(1)                 ,
       BIRTHDATE   DATE                    ,
       SALARY      DECIMAL(9,2)            ,
       BONUS       DECIMAL(9,2)            ,
       COMM        DECIMAL(9,2)            ,
       PRIMARY KEY (EMPNO))
 
ALTER TABLE EMPLOYEE 
      ADD FOREIGN KEY RED (WORKDEPT) 
      REFERENCES DEPARTMENT 
      ON DELETE SET NULL
 
ALTER TABLE EMPLOYEE 
      ADD CONSTRAINT NUMBER 
      CHECK (PHONENO >= '0000' AND PHONENO <= '9999')

См. также

ALTER TABLE, DROP TABLE

Источник

2009-04-10irebird\doc\