В DB2 поддерживаются следующие типы ограничений:
появляться в указанном столбце
указанном столбце или группе столбцов
группу столбцов как одновременно обладающие свойствами UNIQUE и
NOT NULL
запрещающий занесение или удаление данных через представление,
если это противоречит определению представлению
"ссылочной целостности"), устанавливающие контролируемую системой
связь между двумя таблицами, "таблицей-предком" и
"таблицей-потомком". Для каждого отличного от неопределенного
значения внешнего ключа должно иметься совпадающее с ним значение
ключа таблицы-предка.
Ограничения представляют собой декларативные правила. Триггер
больше похож на "джина", который просыпается и выполняет приказы
при возникновении определенных событий. Вот некоторые из
возможностей механизма триггеров DB2:
занесения, удаления или модификации строк указанной таблицы или
при модификации определенных столбцов таблицы.
события, которое его активизирует.
его оператором SQL или же вызываться для каждой строки,
изменяемой оператором SQL.
"условием триггера". Тогда тело триггера выполняется только если
его условие истинно.
операторов SQL. В этих операторах могут использоваться
специальные переменные, указывающие на значения строки или группы
строк до и после активизации триггера. Если в тело триггера
входят операторы модификации базы данных, то авторизация
доступа производится от имени создателя триггера, а не того
пользователя, оператор которого активизировал триггер. Это
позволяет создателю триггера "инкапсулировать" некоторые
привилегии в формы, доступные менее привилегированным
пользователям.
Рассмотрим, например, каким образом триггер может автоматически
поддерживать столбец данных. Предположим, что база данных
содержит таблицу STOCKS со столбцами SYMBOL, PRICE и HIGHPRICE.
Текущая цена всегда поддерживается в столбце PRICE. Можно
захотеть, чтобы при изменении текущей цены в столбце HIGHPRICE
всегда оказывалось ее максимальное значение. Этого можно достичь
путем создания следующего триггера:
CREATE TRIGGER stockhigh
NO CASCADE BEFORE UPDATE ON stocks
REFERENCING NEW AS newrow
FOR EACH ROW MODE DB2SQL
WHEN (newrow.highprice IS NULL OR
newrow.price > newrow.highprice)
SET newrow.highprice = newrow.price;