Шрифт:
ADD TEL_NUMBER VARCHAR (18);
5. Скопируйте данные во вновь созданный столбец.
UPDATE PERSONNEL
SET TEL_NOMBER = TEMP_COL WHERE TEMP_COL IS NOT NULL;
COMMIT;
6. После проверки того, что данные во вновь созданном столбце правильные, удалите временный столбец. Если хотите, вы можете также переместить пересозданный столбец на его старую позицию.
ALTER TABLE PERSONNEL
DROP COLUMN TEMP_COL,
ALTER TEL_NUMBER POSITION 6;
COMMIT;
Удаление таблицы
Используйте оператор DROP TABLE для удаления таблицы и ее данных из базы данных.
Это полное удаление, оно не может быть отменено после подтверждения транзакции.
DROP TABLE имя;
Следующий оператор удаляет таблицу PERSONNEL:
DROP TABLE PERSONNEL;
RECREATE TABLE
Иногда бывает нужно удалить таблицу и снова создать ее "с нуля". Для таких случаев Firebird имеет оператор RECREATE TABLE, который делает следующее:
* удаляет существующую таблицу и все принадлежащие ей объекты;
* подтверждает изменения;
* создает новую таблицу в соответствии с указанной спецификацией.
Синтаксис RECREATE TABLE идентичен синтаксису оператора CREATE TABLE. Просто замените ключевое слово CREATE на RECREATE.
! ! !
ВНИМАНИЕ! Убедитесь, что вы сохранили исходные тексты триггеров, ключей и индексов этой таблицы до выполнения запроса RECREATE TABLE!
. ! .
Если при выполнении оператора DROP или RECREATE таблица находится в использовании, запрос не будет выполнен, появится сообщение "Object xxxxx is in use" (Объект xxxxx используется).
Всегда выполняйте резервное копирование перед любыми действиями, изменяющими метаданные.
Хотя возможно изменение метаданных при наличии соединенных пользователей, этого делать не рекомендуется, особенно в случаях радикальных изменений типа удаления или пересоздания таблиц. Если нужно, отключите пользователей и получите исключительный доступ. Инструкции по получению исключительного доступа см. в главе 39.
Временные таблицы
Firebird не поддерживает временные таблицы, которые управляются системой. Здесь они меньше нужны, чем в других СУБД. Например, у Firebird есть возможность получать виртуальные таблицы напрямую через хранимую процедуру, написанную с использованием специального синтаксиса. Более подробно об этом см. разд. "Хранимые процедуры выбора" в главах 29 и 30.
Постоянные "временные" таблицы
Популярная модель хранения временных данных для доступа приложений - определить постоянную структуру данных, которая включает "идентификатор сессии" или "идентификатор пакета", получающие значение от генератора, или, в Firebird 1.5,
значение CURRENT_TRANSACTION. Приложения могут добавлять, обрабатывать и удалять строки из такой таблицы в процессе решения задачи. Запомните, что Firebird не блокирует таблицы в нормальных ситуациях.
В соответствии с условиями и потребностями приложения оно само будет ответственным за удаление временных строк по окончании сессии при использовании идентификатора сессии для удаления "своих" строк. Альтернативно приложение может послать в служебную таблицу строку, сигнализирующую "требуется чистка", для более поздней отложенной операции, запускаемой перед резервным копированием.
! ! !
СОВЕТ. Временные таблицы, скорее всего, появятся в следующем релизе Firebird.
. ! .
Одной из важных особенностей реляционной СУБД является ее возможность поддерживать отношения между группами постоянных данных, хранимых в таблицах. Далее мы рассмотрим, как Firebird реализует правила по защите ссылочной целостности в этих межтабличных отношениях.
ГЛАВА 17. Ссылочная целостность данных.
Термин ссылочная целостность относится к возможности базы данных защищать себя от получения входных данных, результатом которых может стать нарушение отношений. А именно ссылочная целостность базы данных существует в соответствии с ее способностью осуществлять и защищать отношение между двумя таблицами.