Книга: Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil
Ограничение CHECK
Ограничение CHECK
Одним из наиболее полезных ограничений в базе данных является ограничение проверки. Идея его очень проста - проверять вставляемое в таблицу значение на какое-либо условие и, в зависимости от выполнения условия, вставлять или не вставлять данные.
Синтаксис его достаточно прост:
<tconstraint> = [CONSTRAINT constraint] CHECK (
<search_condition>)}
Здесь constraint - имя ограничения; <search_condition> - условие поиска, в котором в качестве параметра может участвовать вставляемое/изменяемое значение. Если условие поиска выполняется, то вставка/изменение этого значения разрешаются, если нет - возникает ошибка.
Самый простой пример проверки:
create table checktst(
ID integer CHECK(ID>0));
Эта проверка устанавливает, больше ли нуля вставляемое/изменяемое значение поля ID, и в зависимости от результата позволяет вставить/изменить новое значение или возбудить исключение (см. главу "Расширенные возможности языка хранимых процедур InterBase" (ч. 1)).
Возможны и более сложные варианты проверок. Полный синтаксис условия поиска <search_condition> следующий:
<search_condition> = {<val> <operator>
{ <val> | (<select_one>)}
|<val> [NOT] BETWEEN <val> AND <val>
| <val> [NOT] LIKE <val> [ESCAPE <val>]
| <val> [NOT] IN ( <val> [ , <val> ...] | <select_list>)
| <val> IS [NOT] NULL
| <val> {[NOT] {= | < | >} | >= | <=}
{ALL | SOME | ANY} (<select_list>)
|EXISTS ( <select_expr>)
| SINGULAR ( <select_expr>)
| <val> [NOT] CONTAINING <val>
|<val> [NOT] STARTING [WITH] <val>
| (<search_condition>)
| NOT <search_condition>
| <search_condition> OR <search_condition>
| <search_condition> AND <search_condition>}
Таким образом, CHECK предоставляет большой набор опций для проверки вставляемых/изменяемых значений. Необходимо помнить о следующих ограничениях в использовании СНЕК:
* Данные в CHECK берутся только из текущей записи. Не следует брать данные для выражения в CHECK из других записей этой же таблицы - они могут быть изменены другими пользователями.
* Поле может иметь только одно ограничение CHECK.
* Если для описания поля использовался домен, который имеет доменное ограничение CHECK, то его нельзя переопределить на уровне конкретного поля в таблице.
Надо сказать, что CHECK реализованы при помощи системных триггеров, поэтому следует быть осторожным в использовании очень больших условий, которые могут сильно замедлить процессы вставки и обновления записей.
- Для чего нужны индексы?
- Как устроены индексы
- Применение индексов
- Ускорение выполнения запросов с помощью индексов
- Обеспечение ссылочной целостности с помощью индексов
- Оптимизация производительности индексов
- Виды ограничений в базе данных
- Пример типичного ограничения
- Создание ограничений
- Первичный и уникальный ключи
- Внешние ключи
- Ограничение CHECK
- Удаление ограничений
- Синтаксис DDL для работы с представлениями
- Примеры представлений
- Модифицируемые представления
- Заключение
- 3. Ограничение целостности по состоянию
- Условия CHECK
- Ограничения CHECK
- Выражения CHECK в DDL
- Checksum
- Ограничение времени ожидания для транзакций (Lock timeout)
- Ограничение результатов выборки FIRST
- 1. Ограничение функциональной зависимости
- 4.11.5. Ограничение сети
- Ограничение сценариев
- 9.5.8. Ограничение канала
- Листинг 9.4. Ограничение скорости загрузки медиафайлов в рабочее время