- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ - Хелен Борри
Шрифт:
Интервал:
Закладка:
До удаления столбца учтите условия, при которых невозможно будет выполнить удаление. Удаление будет ошибочным, если столбец:
* является частью ограничения UNIQUE, PRIMARY KEY или FOREIGN KEY;
* включен в ограничение CHECK (это могут быть ограничения CHECK на уровне таблицы для основанного на домене столбца в дополнение к ограничению его домена);
* используется в просмотре, триггере или хранимой процедуре.
Зависимости должны быть удалены до удаления столбца. Столбцы, включенные в состав ограничений PRIMARY KEY и UNIQUE, не могут быть удалены, если на них есть ссылки в ограничениях FOREIGN KEY. В этом случае удалите ограничение FOREIGN KEY до удаления ограничения PRIMARY KEY или UNIQUE. После этого удаляйте столбец.
Синтаксис:
ALTER TABLE имя-таблицы DROP имя-столбца [, имя-столбца ...];
Например, следующий оператор удаляет столбец JOB_GRADE из таблицы EMPLOYEE:
ALTER TABLE EMPLOYEE DROP JOB_GRADE;
Удаление нескольких столбцов в одном операторе:
ALTER TABLE EMPLOYEE
DROP JOB_GRADE,
DROP FULL NAME;
Удаление ограничений
Необходимо выполнять удаление ограничений в правильной последовательности, если ограничения PRIMARY KEY и CHECK имеют зависимости.
! ! !
СОВЕТ. Для поиска имен ограничений может оказаться полезным выполнение четырех системных просмотров, определенных в скрипте system_views.sql, представленном в приложении 9.
. ! .
Ограничения UNIQUE KEY и PRIMARY KEY
При удалении ограничений первичного и уникального ключа необходимо вначале найти и удалить все ссылающиеся на них ограничения внешних ключей. Если речь идет об уникальном ключе, то объявление внешнего ключа перечисляет имена столбцов уникального ключа, например:
. . .
FK_DATA_ID FOREIGN KEY DATA_ID
REFERENCES TEST_UQ (DATA_I D) ;
Если ключ, на который имеются ссылки, является первичным ключом, то имя столбца первичного ключа является необязательным в объявлениях внешнего ключа и часто опускается. Например, посмотрите на базу данных ../samples/employee.gdb:
...TABLE PROJECT (
. . . ,
TEAM_CONSTRT FOREIGN KEY(TEAM_LEADER)
REFERENCES EMPLOYEE );
Удаление ограничения внешнего ключа простое:
ALTER TABLE PROJECT
DROP CONSTRAINT TEAM_CONSTRT;
COMMIT;
После этого становится возможным удаление ограничения первичного ключа для столбца EMP_NO таблицы EMPLOYEE:
ALTER TABLE EMPLOYEE
DROP CONSTRAINT EMP_NO_CONSTRT ;
Ограничения CHECKЛюбые условия CHECK, которые были добавлены в процессе определения таблицы, могут быть удалены без каких-либо осложнений. Условия CHECK, наследуемые от домена, являются более проблематичными. Для освобождения от ограничений домена необходимо выполнить операцию ALTER TABLE ALTER COLUMN ... TYPE для изменения типа данных столбца или указания другого домена.
Добавление столбца
Один или более столбцов можно добавить в таблицу в одном операторе при использовании предложения ADD. Каждое предложение ADD включает полное определение столбца. Используется тот же самый синтаксис, что и при определении столбца в операторе CREATE TABLE. Предложения ADD отделяются друг от друга запятыми.
Синтаксис:
ALTER TABLE таблица ADD <определение-столбца>
<определение-столбца> = столбец
{<тип данных> | [COMPUTED [BY] (<выражение>) | домен}
[DEFAULT {литерал NULL | USER} ]
[NOT NULL] [<ограничение-столбца>]
[COLLATE порядок-сортировки]
<ограничение-столбца> = [CONSTRAINT ограничение]
<определение -ограничения> [< ограничение-столбца>]
< определение -ограничения>=
PRIMARY KEY
| UNIQUE
| CHECK (<условие-поиска>)
| REFERENCES другая-таблица [(другой-столбец [,другой-столбец...])]
[ON DELETE {NO ACTION|CASCADE|SET DEFAULT|SET NULL}]
[ON UPDATE {NO ACTION|CASCADE | SET DEFAULT | SET NULL}]
Следующий оператор добавляет столбец EMP_NO в таблицу EMPLOYEE С использованием домена EMPNO:
ALTER TABLE EMPLOYEE ADD EMP_NO EMPNO NOT NULL;
ПримерЗдесь мы добавляем два столбца EMAIL_ID и LEAVE_STATUS в таблицу EMPLOYEE:
ALTER TABLE EMPLOYEE
ADD EMAIL_ID VARCHAR(10) NOT NULL,
ADD LEAVE_STATUS DEFAULT 10 INTEGER NOT NULL;
Включение ограничений целостностиОграничения целостности могут быть включены в столбцы, которые вы добавляете в таблицу. Например, ограничение UNIQUE может быть включено в столбец EMAIL_ID в предыдущем примере:
ALTER TABLE EMPLOYEE
ADD EMAIL_ID VARCHAR(10) NOT NULL,
ADD LEAVE_STATUS DEFAULT 10 INTEGER NOT NULL,
ADD CONSTRAINT UQ_EMAIL_ID UNIQUE(EMAIL_ID);
или
ALTER TABLE EMPLOYEE
ADD EMAIL_ID VARCHAR(IO) NOT NOLL UNIQUE,
ADD LEAVE_STATUS DEFAULT 10 INTEGER NOT NULL;
Добавление новых ограничений таблицыПредложение ADD CONSTRAINT может быть использовано для добавления ограничений на уровне таблицы для нового или существующего столбца.
Синтаксис:
ALTER TABLE имя ADD [CONSTRAINT ограничение] <ограничение-таблицы>;
где ограничение-таблицы- может быть ограничением PRIMARY KEY, FOREIGN KEY, UNIQUE или CHECK. Фраза CONSTRAINT ограничение может быть опущена, если вам не нужно имя ограничения.
ПримерДля добавления ограничения UNIQUE в таблицу EMPLOYEE вы можете использовать следующий оператор:
ALTER TABLE EMPLOYEE
ADD CONSTRAINT UQ_PHONE_EXT UNIQUE(PHONE_EXT);
Когда недостаточно ALTER TABLE
Иногда бывает нужным произвести изменение столбца, которое нельзя совершить с помощью ALTER TABLE. Примером может быть случай, когда столбец, хранящий международные элементы языка, имеет набор символов NONE, который нужно заменить на другой набор символов, чтобы исправить ошибку проектирования, или телефонный номер, определенный вначале кем-то как целое, нужно заменить на 18-символьный столбец.
В первом случае невозможно изменить набор символов для столбца, следовательно, вам нужно средство, чтобы сохранить данные и сделать их доступными в правильном наборе символов. Во втором случае простое изменение типа данных столбца с телефонным номером не будет работать, если у нас уже существуют целые числа в этом столбце. Мы хотим сохранить существующие числа, но нам нужно преобразовать их в строки. Это не может быть выполнено в существующей структуре, потому что столбец с целым типом данных не может хранить строки.
Прием заключается в создании в таблице временного столбца с правильными атрибутами и переносе туда данных, после чего вы удалите и пересоздадите нужный столбец.
1. Добавьте в таблицу временный столбец с теми атрибутами, которые вам нужны.
ALTER TABLE PERSONNEL
ADD TEMP_COL VARCHAR (18) ;
COMMIT;
2. Скопируйте данные из столбца, который вы будете изменять, во временный столбец, преобразовывая их соответствующим образом (например, изменяя набор символов для конвертирования текстовых данных в правильный набор символов или, как в нашем примере, выполняя преобразование).
UPDATE PERSONNEL
SET TEMP_COL = CAST(TEL_NUMBER AS VARCHAR(18))
WHERE TEL_NUMBER IS NOT NULL;
COMMIT;
3. После проверки того, что данные во временном столбце были изменены, как планировалось, удалите старый столбец.
ALTER TABLE PERSONNEL DROP TEL_NUMBER;
4. Создайте "новый" столбец, с тем же именем, как и тот, который вы только что удалили, и с теми же атрибутами, что и у временного столбца.
ALTER TABLE PERSONNEL
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 для удаления таблицы и ее данных из базы данных.
Это полное удаление, оно не может быть отменено после подтверждения транзакции.
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.

