double arrow

Стандартный синтаксис ALTER TABLE в InterBase вообще не предполагает возможности изменения столбца

Добавление столбцов, требующих обязательного ввода данных

Примеры

Следующий пример добавляет столбец в таблицу и удаляет столбец:

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;

Модификация элементов таблицы

Атрибутыстолбца задают правила представления данных в столбце. С помощью команды ALTER TABLE можно менять атрибуты столбца. Под атрибутами здесь понимается следующее:

  • тип данных в столбце;
  • длина, точность или масштаб данных в столбце;
  • разрешение или запрет иметь в столбце значение NULL.

В следующем примере команда ALTER TABLE используется для того, чтобы изменить атрибуты столбца EMP_ID таблицы EMPLOYEE_TBL.

ALTER TABLE EMPLOYEE_TBL MODIFY (EMP_ID VARCHAR(10));

Столбцу уже был назначен тип данных VARCHAR (строка символов переменной длины), но здесь была увеличена максимальная длина строки с 9 до 10.

При добавлении столбца в уже существующую таблицу с имеющимися в ней данными новому столбцу нельзя назначить атрибут NOT NULL. NOT NULL означает, что столбец должен содержать значения для каждой строки в таблице, так что если добавляемый столбец получит атрибут NOT NULL, вы сразу же получите противоречие с этим ограничением, поскольку имеющиеся в таблице столбцы не имеют значений для нового столбца.

И все же имеется возможность добавить столбец, требующий обязательного ввода данных, следующим образом.

  1. Добавьте столбец, задав ему атрибут NULL (это значит, что в столбце не обязательно должны присутствовать данные).
  2. Введите данные в каждую строку нового столбца таблицы.
  3. Убедившись, что столбец содержит значение в каждой из строк таблицы, можно изменить атрибут столбца на NOT NULL.

Порядок действий при этом может быть следующим:

· добавить новый столбец с тем же типом данных, что и в изменяемом столбце (ALTER TABLE ADD…);

· скопировать данные из существующего столбца в новый (UPDATE…);

· выполнить необходимые действия по подготовке к удалению существующего столбца (удаление соответствующих ограничений);

· выполнить удаление существующего столбца (ALTER TABLE DROP…);

· создать столбец с именем удаленного и новыми характеристиками (ALTER TABLE ADD…);

· скопировать данные из столбца-копии в столбец с измененными характеристиками (UPDATE… = CAST(…)…);

· удалить столбец-копию (ALTER TABLE DROP…);

· выполнить операции по восстановлению (при необходимости) группы ограничений, удаленных в процессе подготовки к удалению исходного столбца;

· ВОЗМОЖНО ВСЕ ПОЛУЧИТСЯ!!!

Пример:

alter table p add new decimal(10) not null; (создаем новый столбик new)

update p set new = pnum; (переносим данные из столбика с первичным ключом)

commit; (запоминаем)

/*alter table p drop constraint integ_6; (удаляем ограничение unique с стл.N1)*/

alter table pd drop constraint integ_15; (удаляем внешний ключ)

alter table p drop pnum; (удаляем столбик PNUM)

alter table p alter new to pnum; (переименовываем стл. new--pnum)

ALTER TABLE p ADD constraint p_num unique (pnum); (добавляем в pnum ограничение unique)

alter table p add primary key (n1); (присваеваем стл.N1 первичный ключ)

commit;

/* рабочий вариант */

alter table p add new decimal(10) not null;

update p set new = pnum;

alter table pd drop constraint integ_13;

drop trigger new_p;

drop view pdv;

alter table p drop pnum;

alter table p alter new to pnum;

alter table p add primary key (pnum);

commit;


Сейчас читают про: