====== 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 [, ...];
= {ADD | ADD | DROP col
| DROP CONSTRAINT constraint}
= col { | [COMPUTED [BY] () | domain}
[DEFAULT {literal | NULL | USER}]
[NOT NULL] []
[COLLATE collation]
= [CONSTRAINT constraint]
[]
= {PRIMARY KEY | UNIQUE
| CHECK ()
| REFERENCES other_table [(other_col [, other_col ...])]}
= {
{SMALLINT | INTEGER | FLOAT | DOUBLE PRECISION} []
| {DECIMAL | NUMERIC} [(precision [, scale])] []
| DATE []
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(1...32767)] [] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR}
[VARYING] [(1...32767)] []
| BLOB [SUB_TYPE {int | subtype_name}] [SEGMENT SIZE int]
[CHARACTER SET charname]
| BLOB [(seglen [, subtype])]
}
= [x:y [, x:y ...]]
:!: Внешние скобки должны быть включены в объявление массивов.
= CONSTRAINT constraint
[]
= {
{PRIMARY KEY | UNIQUE} (col [, col ...])
| FOREIGN KEY (col [, col ...]) REFERENCES other_table
| CHECK ()
}
Обратите внимание: Для полного синтаксиса , смотри [[CREATE TABLE]].
^ Аргумент ^ Описание ^
|table |Имя существующей таблицы, которую надо измененить. |
|< operation > |Операция, которую необходимо произвести над таблицей. Допустимые опции:1) ADD: Добавить новый столбец или ограничение к таблице; 2)DROP: Удалить существующий столбец или ограничение из таблицы.|
|< col_def > |Описание нового столбца, который следует добавить. Должно включать имя столбца и тип данных. Может включать значение по умолчанию, ограничения столбца и специфический порядок сортировки.|
| |Описание нового ограничения таблицы, которое следует добавить. Только одно ограничение таблицы может быть добавлено к таблице. |
|col |Имя добавляемого или удаляемого столбца. Имя столбца должно быть уникальным внутри таблицы.|
|< constraint > |Имя добавляемого или удаляемого ограничения. Имя ограничения должно быть уникальным внутри таблицы.|
|COLLATE collation |Добавляет порядок сортировки к определенной таблице.|
|< datatype > |Тип данных добавляемого столбца. |
|domain |Имя домена, на котором определение столбца должно быть основано.|
|COMPUTED [BY] |Определяет вычисляемый столбец основаный на выражении . Такой столбец не занимает пространства памити в базе данных. может быть любым арифметическим выражением допустимым для типов данных в выражении. Другие столбцы, на котрые ссылается выражение , должны существовать раньше, чем они будут использованы. Выражение не может ссылатся на BLOB столбцы. должно возвращать одиночное значение и не может возвращать массив.|
|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 терпит неудачу, если текущие данные в таблице нарушают [[constraint|PRIMARY KEY]] или [[constraint|UNIQUE]] ограничение, добавленное к таблице. Инструкция так же терпит неудачу если столбец, который должен быть удален:
* Часть [[constraint|UNIQUE]], [[constraint|PRYMARY]] или [[constraint|FOREGN KEY]] ограничения или используется в [[CHECK]] ограничении.
* Используется в выражении вычисляемого столбца.
Удалите ограничения или вычисляемые столбцы прежде удаления столбца таблицы. Ограничения [[constraint|PRIMARY KEY]] и [[constraint|UNIQUE]] не можгут быть удалены, если используются для [[FOREIGN KEY]] ограничений. В этом случае, удалите ограничение [[constraint|FOREIGN KEY]] раньше удаления [[constraint|PRIMARY KEY]] или [[constraint|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;
===== См. также =====
[[CREATE TABLE]], [[DROP TABLE]], [[CREATE DOMAIN]], [[ALTER DOMAIN]], [[DROP DOMAIN]]
===== Источник =====
langref.pdf