Ограничения для таблицы (table_constraint) и ограничения для столбца
(column_constraint), называемые также ограничениями целостности,
накладывают определенные условия на вводимые в таблицу данные.
Ограничения
для столбца указываются непосредственно после описания столбца, а
ограничения для таблицы - через запятую после описания любого столбца.
В
стандарте SQL92 ограничения должны иметь имена, которые генерируются
СУБД. В наиболее продвинутых БД, в частности Oracle, доступ к
ограничениям возможен посредством служебных таблиц словаря базы данных и
дополнительного набора команд языка SQL.
Ограничения для столбца могут указываться следующими фразами:
NOT NULL - в любой добавляемой или изменяемой строке столбец всегда должен иметь значение, отличное от NULL.
UNIQUE - все значения столбца должны быть уникальны.
PRIMARY
KEY - устанавливает один столбец как первичный ключ и одновременно
подразумевает, что все значения столбца будут уникальны.
CHECK
(condition) - указываемое в скобках условие использует для сравнения
значение столбца и возвращает TRUE, FALSE или UNKNOWN. Если при попытке
выполнения SQL-оператора возвращаемое значение равно FALSE, то оператор
выполнен не будет.
REFERENCES table (fields_list) - ограничение
требует совпадения значений столбцов данной таблицы с указанными
столбцами родительской таблицы.
Ограничения для таблицы могут указываться следующими фразами:
CHECK
(condition) - указываемое в скобках условие использует для сравнения
значение столбца и возвращает TRUE, FALSE или UNKNOWN. Если при попытке
выполнения SQL-оператора возвращаемое значение равно FALSE, то оператор
выполнен не будет.
FOREIGN KEY (fields_list) - это ограничение по
внешнему ключу аналогично ограничению REFERENCES для столбцов и
гарантирует, что все значения, указанные во внешнем ключе, будут
соответствовать значениям родительского ключа, обеспечивая ссылочную
целостность. Следует отметить, что типы данных столбцов, используемых в
этом ограничении, должны совпадать, а типы таблиц (постоянная базовая
таблица, глобальная локальная временная таблица, локальная временная
таблица) родительского и внешнего ключа - соответствовать друг другу.
Стандарт
SQL92 позволяет устанавливать режим контроля ограничений как перед
выполнением каждого SQL-оператора, так и в конце текущей транзакции. В
последнем случае допускается нарушение ограничения целостности внутри
транзакции. Этот режим очень полезен для внесения данных в таблицы,
связанные ограничением REFERENCES.