27_SH43-0144-00 (1038594), страница 45
Текст из файла (страница 45)
Необязательно: Введите имя ограничения этого первичного ключа.5. Нажмите кнопку OK.||||Чтобы добавить первичные ключи из командной строки, введите команду:ALTER TABLE <имя>ADD CONSTRAINT <имя_столбца>PRIMARY KEY <имя_столбца>После добавления в таблицу внешнего ключа могут быть отмечены какнедействительные пакеты и кэшируемые динамические операторы SQL,содержащие:v Операторы, вставляющие или изменяющие данные в таблице, содержащейэтот внешний ключv Операторы, изменяющие или удаляющие данные в родительской таблице.Смотрите раздел “Зависимости операторов при изменении объектов” настр. 221.Глава 4. Изменение базы данных197Чтобы добавить внешние ключи с помощью Центра управления:|1.
Раскройте дерево объектов и найдите папку Таблицы.2. Щелкните правой кнопкой по таблице, которую нужно изменить, и выберите извсплывающего меню пункт Изменить.3. На странице Внешние ключи нажмите кнопку Добавить.4. В окне Добавить внешние ключи задайте информацию о родительской таблице.5. Выберите один или несколько столбцов в качестве внешних ключей и нажмитекнопку со стрелкой, чтобы переместить их.6. Задайте действие, выполняемое с зависимой таблицей при удалении или изменениистроки родительской таблицы. Для внешнего ключа можно также задать имяограничения.7. Нажмите кнопку OK.Чтобы добавить внешние ключи из командной строки, введите команду:||||||ALTER TABLE <имя>ADD CONSTRAINT <имя_столбца>FOREIGN KEY <имя_столбца>ON DELETE <тип_действия>ON UPDATE <тип_действия>В следующих примерах показано использование оператора ALTER TABLE длядобавления в таблицу первичных ключей и внешних ключей:ALTER TABLE PROJECTADD CONSTRAINT PROJECT_KEYPRIMARY KEY (PROJNO)ALTER TABLE EMP_ACTADD CONSTRAINT ACTIVITY_KEYPRIMARY KEY (EMPNO, PROJNO, ACTNO)ADD CONSTRAINT ACT_EMP_REFFOREIGN KEY (EMPNO)REFERENCES EMPLOYEEON DELETE RESTRICTADD CONSTRAINT ACT_PROJ_REFFOREIGN KEY (PROJNO)REFERENCES PROJECTON DELETE CASCADEДобавление проверочных ограничений таблицы: Проверочные ограниченияможно добавить в существующую таблицу с помощью оператора ALTERTABLE.
Имя ограничения не должно совпадать с именами других ограничений,заданных в этом операторе ALTER TABLE, и должно быть уникальным втаблице (среди имен всех определенных ограничений реляционной целостности).Перед завершением оператора существующие данные проверяются насоответствие этому новому условию.198Руководство администратора: РеализацияЧтобы добавить ограничения к большой таблице, лучше перевести таблицу всостояние отложенной проверки, добавить ограничения и затем проверитьтаблицу, получив общий список нарушающих правила строк.
Чтобы явно задатьсостояние отложенной проверки, используйте оператор SET INTEGRITY (еслиэто родительская таблица, все зависимые и дочерние таблицы будут неявнопереведены в состояние отложенной проверки).После добавления в таблицу проверочного ограничения таблицы могут бытьотмечены как недействительные пакеты и кэшируемые динамические операторыSQL, выполняющие вставку или изменение данных этой таблицы.Дополнительную информацию смотрите в разделе “Зависимости операторовпри изменении объектов” на стр. 221.|||||||||||||||Чтобы добавить проверочное ограничение таблицы с помощью Центрауправления:1. Раскройте дерево объектов и найдите папку Таблицы.2.
Щелкните правой кнопкой по таблице, которую нужно изменить, и выберите извсплывающего меню пункт Изменить.3. На странице Проверочное ограничения нажмите кнопку Добавить.4. Введите необходимую информацию в окне Добавить проверочное ограничение инажмите кнопку OK.5.
На странице Проверочное ограничения нажмите кнопку OK.Чтобы добавить проверочное ограничение таблицы из командной строки,введите команду:ALTER TABLE <имя>ADD CONSTRAINT <имя> (<ограничение>)Следующий оператор SQL добавляет в таблицу EMPLOYEE ограничение,требующее, чтобы сумма зарплата и комиссионных была больше $25000:ALTER TABLE EMPLOYEEADD CONSTRAINT REVENUE CHECK (SALARY + COMM > 25000)Отбрасывание ограниченияДля отбрасывания ограничений используется оператор ALTER TABLE.Дополнительную информацию об этом операторе, включая его синтаксис,смотрите в руководстве SQL Reference.Дополнительную информацию об ограничениях смотрите в разделе“Определение ограничений” на стр. 128.Отбрасывание ограничений уникальности: С помощью оператора ALTERTABLE можно явно отбросить ограничение уникальности.
Имена всехГлава 4. Изменение базы данных199ограничений уникальности таблицы можно найти в производной таблицесистемного каталога SYSCAT.INDEXES.Следующий оператор SQL отбрасывает ограничение уникальности NEWID изтаблицы EMPLOYEE:ALTER TABLE EMPLOYEEDROP UNIQUE NEWIDПри удалении этого ограничения уникальности делаются недействительнымивсе пакеты или кэшируемые динамические операторы SQL, которые используютэто ограничение.Отбрасывание первичных и внешних ключей: Чтобы отбросить первичный ключс помощью Центра управления:|||||||||||1. Раскройте дерево объектов и найдите папку Таблицы.2. Щелкните правой кнопкой по таблице, которую нужно изменить, и выберите извсплывающего меню пункт Изменить.3. В правой части страницы Первичный ключ выберите первичный ключ, которыйнужно удалить, и нажмите кнопку со стрелкой, чтобы переместить его в полеДоступные столбцы в левой части страницы.4.
Нажмите кнопку OK.Чтобы отбросить первичный ключ из командной строки, введите команду:|||ALTER TABLE <имя>DROP PRIMARY KEYПосле отбрасывания ограничения внешнего ключа могут быть отмечены какнедействительные пакеты или кэшируемые динамические операторы SQL,содержащие:v Операторы, вставляющие или изменяющие данные в таблице, содержащейэтот внешний ключv Операторы, изменяющие или удаляющие данные в родительской таблице.Дополнительную информацию смотрите в разделе “Зависимости операторовпри изменении объектов” на стр. 221.200Руководство администратора: Реализация|Чтобы отбросить внешний ключ с помощью Центра управления:1.
Раскройте дерево объектов и найдите папку Таблицы.2. Щелкните правой кнопкой по таблице, которую нужно изменить, и выберите извсплывающего меню пункт Изменить.3. На странице Внешние ключи нажмите кнопку Добавить.4. В правой части страницы выберите внешний ключ, который нужно удалить, инажмите кнопку со стрелкой, чтобы переместить его в поле Доступные столбцы влевой части страницы.5. На странице Внешние ключи нажмите кнопку OK.|||Чтобы отбросить внешний ключ из командной строки, введите команду:ALTER TABLE <имя>DROP FOREIGN KEY <имя_внешнего_ключа>В следующих примерах для отбрасывания из таблицы первичных ключей ивнешних ключей используются условия DROP PRIMARY KEY и DROPFOREIGN KEY оператора ALTER TABLE:ALTER TABLE EMP_ACTDROP PRIMARY KEYDROP FOREIGN KEY ACT_EMP_REFDROP FOREIGN KEY ACT_PROJ_REFALTER TABLE PROJECTDROP PRIMARY KEYИнформацию об операторе ALTER TABLE смотрите в руководстве SQLReference.Отбрасывание проверочных ограничений таблицы: Проверочное ограничениетаблицы можно явно отбросить или изменить с помощью оператора ALTERTABLE или же неявно отбросить при выполнении оператора DROP TABLE.|||||||||После отбрасывания проверочного ограничения таблицы становятсянедействительными все пакеты и кэшируемые динамические операторы SQL,выполняющие вставку или изменение данных этой таблицы.
(Дополнительнуюинформацию смотрите в разделе “Зависимости операторов при измененииобъектов” на стр. 221.) Имена всех проверочных ограничений таблицы можнонайти в производной таблице каталога SYSCAT.CHECKS. Перед тем какотбрасывать проверочное ограничение таблицы, имя которого сгенерированосистемой, посмотрите это имя в производной таблице каталогаSYSCAT.CHECKS.||Чтобы отбросить проверочное ограничение таблицы с помощью Центрауправления:Глава 4.
Изменение базы данных201|||||||1. Раскройте дерево объектов и найдите папку Таблицы.2. Щелкните правой кнопкой по таблице, которую нужно изменить, и выберите извсплывающего меню пункт Изменить.3. На странице Проверочное ограничения выберите проверочное ограничение, котороенужно отбросить, нажмите кнопку Удалить и затем нажмите кнопку OK.Чтобы отбросить проверочное ограничение таблицы из командной строки,введите команду:||||ALTER TABLE <имя_таблицы>DROP CHECK <имя_проверочного_ограничения>Следующий оператор SQL отбрасывает табличное проверочное ограничениеREVENUE из таблицы EMPLOYEE:ALTER TABLE EMPLOYEEDROP CHECK REVENUE|||||Определение генерируемых столбцов в существующих таблицахГенерируемый столбец определяется в базовой таблице, в которой сохраняемоезначение не задается операциями вставки или изменения, а вычисляется понекоторой формуле.
Генерируемый столбец можно создать при созданиитаблицы или при изменении существующей таблицы.||||||||||||||Чтобы определить генерируемый столбец, выполните следующие шаги:1. Переведите таблицу в состояние отложенной проверки.SET INTEGRITY FOR t1 OFF2. Измените таблицу, добавив один или несколько генерируемых столбцов.ALTER TABLE t1 ADD COLUMN c3 DOUBLE GENERATED ALWAYS AS (c1 + c2),ADD COLUMN c4 GENERATED ALWAYS AS(CASE WHEN c1 > c3 THEN 1 ELSE NULL END))3. Далее, в зависимости от действий, которые нужно выполнить для этойтаблицы, есть несколько путей выполнения задачи:v Таблица имеет очень большой размер и вы не уверены, что объемажурналов достаточно для выполнения этой задачи. После загрузкиданных, но перед включением проверки целостности нужно выполнитьпринятие:COMMITЗатем нужно использовать утилиту db2gncol, чтобы вычислить значениягенерируемых столбцов.
Эта утилита находится в каталоге sqllib вподкаталоге bin. Эта утилита используется так:|||||db2gncol -d <имя_базы_данных> -s <схема> -t <имя_таблицы>-c <число_принятия>202Руководство администратора: Реализация|||||||||имя_базы_данных задает алиас базы данных, в которой находится таблица.Схема задает имя схемы таблицы (этот параметр регистрозависим).имя_таблицы задает таблицу, для столбцов которой нужно вычислить поформулам новые значения генерируемых столбцов. Как и схема,имя_таблицы регистрозависимо. Число_принятия - это числообрабатываемых строк перед выполнением следующей операциипринятия, очищающей журналы. Этот параметр влияет на размерпространства журналов, необходимого для выполнения генерациизначений столбцов.|||||Существуют также два необязательных параметра, которые не показаны впредыдущем примере.