Содержание
ALTER TABLE
Версии сервера
0.9 | 1.0 | 1.5.3 | 1.5.4 | 1.5.5 | 2.0 | 2.0.3 | 2.0.4 | 2.1 | 2.5 | 3.0 |
---|---|---|---|---|---|---|---|---|---|---|
Да | Да | Да | Да | Да | Да | Да | Да | Да | ? | ? |
Формат
ALTER TABLE table <operation> [, <operation> ...]; <operation> = {ADD <col_def> | ADD <table_constraint> | DROP col | DROP CONSTRAINT constraint} <col_def> = col {<datatype> | [COMPUTED [BY] (<expr>) | domain} [DEFAULT {literal | NULL | USER}] [NOT NULL] [<col_constraint>] [COLLATE collation] <col_constraint> = [CONSTRAINT constraint] <constraint_def> [<col_constraint>] <constraint_def> = {PRIMARY KEY | UNIQUE | CHECK (<search_condition>) | REFERENCES other_table [(other_col [, other_col ...])]} <datatype> = { {SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} [<array_dim>] | {DECIMAL | NUMERIC} [(precision [, scale])] [<array_dim>] | DATE [<array_dim>] | {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR} [(1...32767)] [<array_dim>] [CHARACTER SET charname] | {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(1...32767)] [<array_dim>] | BLOB [SUB_TYPE {int | subtype_name}] [SEGMENT SIZE int] [CHARACTER SET charname] | BLOB [(seglen [, subtype])] } <array_dim> = [x:y [, x:y ...]]
Внешние скобки должны быть включены в объявление массивов.
<table_constraint> = CONSTRAINT constraint <tconstraint_opt> [<table_constraint>] <tconstraint_opt> = { {PRIMARY KEY | UNIQUE} (col [, col ...]) | FOREIGN KEY (col [, col ...]) REFERENCES other_table | CHECK (<search_condition>) }
Обратите внимание: Для полного синтаксиса <search_condition>, смотри CREATE TABLE.
Аргумент | Описание |
---|---|
table | Имя существующей таблицы, которую надо измененить. |
< operation > | Операция, которую необходимо произвести над таблицей. Допустимые опции:1) ADD: Добавить новый столбец или ограничение к таблице; 2)DROP: Удалить существующий столбец или ограничение из таблицы. |
< col_def > | Описание нового столбца, который следует добавить. Должно включать имя столбца и тип данных. Может включать значение по умолчанию, ограничения столбца и специфический порядок сортировки. |
<table_constraint> | Описание нового ограничения таблицы, которое следует добавить. Только одно ограничение таблицы может быть добавлено к таблице. |
col | Имя добавляемого или удаляемого столбца. Имя столбца должно быть уникальным внутри таблицы. |
< constraint > | Имя добавляемого или удаляемого ограничения. Имя ограничения должно быть уникальным внутри таблицы. |
COLLATE collation | Добавляет порядок сортировки к определенной таблице. |
< datatype > | Тип данных добавляемого столбца. |
domain | Имя домена, на котором определение столбца должно быть основано. |
COMPUTED [BY] <expr> | Определяет вычисляемый столбец основаный на выражении <expr>. Такой столбец не занимает пространства памити в базе данных. <expr> может быть любым арифметическим выражением допустимым для типов данных в выражении. Другие столбцы, на котрые ссылается выражение <expr>, должны существовать раньше, чем они будут использованы. Выражение не может ссылатся на BLOB столбцы. <expr> должно возвращать одиночное значение и не может возвращать массив. |
NOT NULL | Определяет что столбец не может содержать значение NULL. Если таблица уже имеет строки, новые столбцы не могут быть NOT NULL. Атрибут NOT NULL используется только для столбцов. |
DEFAULT | Определяет значение по умолчанию столбца, которое устанавливается когда не сделано ни какого ввода. Значения: 1)literal: Вставляется специфическая строка, числовое значение, или дата; 2)NULL: Вводится значение NULL; 3)USER: Вводится имя текущего пользователя. Столбец должен быть совместимого текстового типа, чтобы использовать значение по умолчанию. Установка значению по умолчанию на уровне столбца отменяет значение по умолчанию на уровне домена. |
< constraint_def > | Определение ограничения столбца. |
CONSTRAINT | Добавляет именованное ограничение к таблице. См. CONSTRAINT |
DROP CONSTRAINT | Удаляет определенное ограничение таблицы. См. CONSTRAINT |
Описание
ALTER TABLE дает возможность изменить структуру существующей таблицы. Одиночная инструкция ALTER TABLE может выполнить множественные добавления и удаления.
Именование ограничения столбца факультативно. Если имя не определено, Firebird назначает сгенерированное системой имя. Присвоение описательно имени может cделать ограничение проще для поиска, изменения или удаления, а так же проще для поиска, когда это имя появляется в сообщениях об ошибках нарушения ограничения.
Таблица может быть изменена ее создателем и пользователем SYSDBA.
Инструкция ALTER TABLE терпит неудачу, если текущие данные в таблице нарушают PRIMARY KEY или UNIQUE ограничение, добавленное к таблице. Инструкция так же терпит неудачу если столбец, который должен быть удален:
* Часть UNIQUE, PRYMARY или FOREGN KEY ограничения или используется в CHECK ограничении. * Используется в выражении вычисляемого столбца.
Удалите ограничения или вычисляемые столбцы прежде удаления столбца таблицы. Ограничения PRIMARY KEY и UNIQUE не можгут быть удалены, если используются для FOREIGN KEY ограничений. В этом случае, удалите ограничение FOREIGN KEY раньше удаления PRIMARY KEY или UNIQUE ключа, на которые оно ссылается.
Когда происходит изменение столбца основанного на домене, дополнительные CHECK ограничения могут быть заданны для столбца. Изменение таблиц содержащих CHECK ограничения с подзапросами могут вызвать нарушения ограничений.
Когда столбцы изменены или удалены любые данные, сохраненные в них, потеряны.
Пример
Следующий пример добавляет столбец в таблицу и удаляет столбец:
ALTER TABLE COUNTRY ADD CAPITAL VARCHAR(25), DROP CURRENCY;
Эта инструкция приводит к потере любых данных в удаленном столбце.
Следующая инструкция добавляет два столбца в таблицу и определяет UNIQUE ограничение на одном из них:
ALTER TABLE COUNTRY ADD CAPITAL VARCHAR(25) UNIQUE, ADD LARGEST_CITY VARCHAR(25) NOT NULL;
См. также
Источник
langref.pdf
Обсуждение