Инструменты пользователя

Инструменты сайта


Боковая панель

Введение

Статьи и часто задаваемые вопросы

Установка и настройка

Обработка ошибок

Полезные запросы SQL

Тематические группы

create_table



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). Иначе ограничению и индексу присваивается системное имя.

  • Ограничение UNIQUE определяет уникальный ключ: значение столбца должно быть уникальным — в таблице не должно существовать двух разных строк, имеющих одно и то же значение этого столбца. Уникальный ключ в отличие от первичного может иметь пустое значение NULL. Строк с пустым значением уникального ключа в таблице может быть произвольное количество. Таблица может содержать любое количество уникальных ключей. Для уникального ключа система автоматически создает индекс. Если ограничению при этом было назначено имя в предложении CONSTRAINT (при отсутствии предложения USING), то это имя присваивается созданному индексу. Если же было задано и предложение USING, то индекс для уникального ключа получает имя, указанное в этом предложении. В противном случае система присваивает индексу системное имя.
  • Ограничение PRIMARY KEY определяет первичный ключ. В таблице может быть только один первичный ключ. Столбец, являющийся первичным ключом, обязательно должен быть описан с указанием NOT NULL. Для первичного ключа система автоматически создает соответствующий индекс. Если ограничению было назначено имя в предложении CONSTRAINT (при отсутствии предложения USING), то это имя присваивается созданному индексу. Если же было задано и предложение USING, то индекс для первичного ключа получает имя, указанное в этом предложении.
  • Ограничение REFERENCES определяет внешний ключ. Внешний ключ должен иметь пустое значение NULL или же он должен ссылаться на первичный или уникальный ключ другой или той же самой таблицы (родительской таблицы). Для внешнего ключа система автоматически создает индекс. Если ограничению было назначено имя в предложении CONSTRAINT (при отсутствии предложения USING), то это имя присваивается созданному индексу. Если же было задано и предложение USING, то индекс для внешнего ключа получает имя, указанное в этом предложении.

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

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

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

  • NO ACTION — не будет выполнено никаких действий; в клиентской программе должны быть предприняты специальные меры по поддержанию ссылочной целостности данных. Это может выполнять сама клиентская программ или для этого следует написать выполняемую хранимую процедуру, к которой должно осуществляться в процессе удаления строки обращение из клиентской программы, или специально созданный пользовательский триггер до удаления (BEFORE DELETE), выполняющий все необходимые установки;
  • CASCADE — в подчиненной таблице должны быть удалены все записи, имеющие те же значения внешнего ключа, что и значение первичного (уникального) ключа удаленной строки главной таблицы;
  • SET DEFAULT — значения внешнего ключа всех соответствующих строк в подчиненной таблице устанавливаются в значение по умолчанию, определенное в предложении DEFAULT этого столбца, описанного как внешний ключ. Если значение по умолчанию не указано, то столбцу присваивается значение NULL;
  • SET NULL — значения внешнего ключа всех соответствующих строк в подчиненной таблице устанавливаются в пустое значение NULL. Если это предложение отсутствует, то будет установлено RESTRICT. Это означает, что из родительской таблицы нельзя удалить строку, для которой существуют строки в дочерней таблице, внешние ключи которых ссылаются на первичный (уникальный) ключ удаляемой строки.

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

  • NO ACTION — не будет выполнено никаких действий; в программе должны быть предприняты специальные меры по поддержанию ссылочной целостности данных;
  • CASCADE — в подчиненной таблице должны быть изменены все значения внешнего ключа, имеющие те же значения, что и значение первичного (уникального) ключа изменяемой строки главной таблицы;
  • SET DEFAULT — значения внешнего ключа всех соответствующих строк в подчиненной таблице устанавливаются в значение по умолчанию, заданное в предложении DEFAULT для этого столбца;
  • SET NULL — значения внешнего ключа всех соответствующих строк в подчиненной таблице устанавливаются в пустое значение NULL. Если это предложение отсутствует, то будет установлено RESTRICT. Это означает, что в родительской таблице нельзя изменить значение первичного (уникального) ключа, если в дочерней таблице существуют строки, внешние ключи которых ссылаются на первичный (уникальный) ключ изменяемой строки.

Ограничение 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')

См. также

Источник

2009-04-10irebird\doc\

Только авторизованные участники могут оставлять комментарии.
create_table.txt · Последние изменения: 2009/07/29 08:25 (внешнее изменение)