Справочник по инструкциям и функциям InterBase SQL
Описание
ALTER TABLE дает возможность изменить структуру существующей таблицы. Одиночная инструкция ALTER TABLE может выполнить множественные добавления и удаления.
Именование ограничения столбца факультативно. Если имя не определено, InterBase назначает сгенерированное системой имя. Присвоение описательно имени может 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 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]
Обратите внимание: Предложение COLLATE не может быть определено для BLOB столбцов.
<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>, смотри CRATE TABLE.
Аргумент | Описание | |
---|---|---|
table |
Имя существующей таблицы, которую надо измененить. | |
<operation> |
Операция, которую необходимо произвести над таблицей. Допустимые опции:
|
|
<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 |
Определяет значение по умолчанию столбца, которое устанавливается когда не сделано
ни какого ввода. Значения:
|
|
<constraint_def> |
Определение ограничения столбца. | |
CONSTRAINT |
Добавляет именованное ограничение к столбцу. | |
DROP CONSTRAINT |
Удаляет определенное ограничение таблицы. |
Примеры
Следующий пример добавляет столбец в таблицу и удаляет столбец:
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;