Delphi 3 и создание приложений баз данных

Изменение объявления таблиц


Оператор ALTER TABLE позволяет:

• добавить определение нового столбца;

• удалить столбец из таблицы;

• удалить атрибуты целостности таблицы или отдельного столбца;

добавить новые атрибуты целостности.

Перед изменением каких-либо атрибутов столбца данные, которые хранятся в нем, нужно сохранить. Для этого в таблице определяют временный столбец, в точности повторяющий все характеристики того столбца, который планируется изменить. Затем данные из изменяемого столбца копируют во временный столбец (используя, например, оператор UPDATE). После этого столбец, подлежащий изменению, попросту удаляют из таблицы, а на его месте создают новый, одноименный столбец с желаемыми атрибутами. В заключение в него копируют данные из временного столбца, а временный столбец уничтожают.

Пример.

Пусть имеется таблица

CREATE TABLE SOTR(ID_SOTR INTEGER NOT NULL PRIMARY KEY,

FIO CHAR(10) COLLATE PXW_CYRL,

OTDEL VARCHAR(lO) COLLATE PXW_CYRL,

DOLJNOST CHAR(10) COLLATE PXW_CYRL

);

Пусть необходимо изменить характеристики столбца FIO, изменив тип столбца с CHAR(IO) на VARCHAR(25). Тогда:



1. Добавляем в таблицу новый временный столбец FIO_TMP, полностью повторяющий характеристики изменяемого столбца FIO:

ALTER TABLE SOTR

ADD FIO_TMP CHAR(10) CHARACTER SET WIN1251

COLLATE PXW_CYRL;

2. Копируем данные из FIO в FIO_TMP:

UPDATE SOTR

SET FIO_TMP = FIO;

3. Удаляем столбец FIO:

ALTER TABLE SOTR

DROP FIO;

4. Создаем новый столбец FIO с необходимыми характеристиками:

ALTER TABLE SOTR

ADD FIO VARCHAR(25) COLLATE PXW_CYRL;

5. Переписываем данные из временного столбца FIO_TMP в новый столбец FIO:

UPDATE SOTR

SET FIO = FIOJTMP;

6. Удаляем временный столбец FIO_TMP:

ALTER TABLE SOTR

DROP FIO_TMP;

ЗАМЕЧАНИЕ.

Следует помнить, что изменение характеристик столбца, а также удаление столбца может закончиться неудачей, если:

• столбец приобретает атрибуты PRIMARY KEY или UNIQUE, но старые значения в столбце нарушают требования уникальности данных;

• удаляемый столбец входил как часть в первичный или внешний ключ, что привело к нарушению ссылочной целостности между таблицами;

• столбцу были приписаны ограничения целостности CHECK на уровне таблицы;

• столбец использовался в иных компонентах БД - в просмотрах, триггерах, в выражениях для вычисляемых столбцов.

Все вышесказанное свидетельствует о том, что в случае необходимости изменения атрибутов столбца или в случае удаления столбца, сначала необходимо тщательно проанализировать, какие последствия для таблицы и базы данных в целом может повлечь такое изменение или удаление.



Содержание раздела