====== 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