Добавление столбцов, требующих обязательного ввода данных
Примеры
Следующий пример добавляет столбец в таблицу и удаляет столбец:
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, вы сразу же получите противоречие с этим ограничением, поскольку имеющиеся в таблице столбцы не имеют значений для нового столбца.
И все же имеется возможность добавить столбец, требующий обязательного ввода данных, следующим образом.
- Добавьте столбец, задав ему атрибут NULL (это значит, что в столбце не обязательно должны присутствовать данные).
- Введите данные в каждую строку нового столбца таблицы.
- Убедившись, что столбец содержит значение в каждой из строк таблицы, можно изменить атрибут столбца на 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;