Выражение проверочного ограничения sql
Обновлено: 24.11.2024
Ограничения UNIQUE и CHECK — это два типа ограничений, которые могут использоваться для обеспечения целостности данных в таблицах SQL Server . Это важные объекты базы данных.
В этом разделе содержатся следующие подразделы.
Ограничения UNIQUE
Ограничения представляют собой правила, которые принудительно применяются в Компонент SQL Server Database Engine от имени пользователя. Например, ограничения UNIQUE можно использовать для обеспечения того, чтобы в указанные столбцы, не входящие в состав первичного ключа, не вводились повторяющиеся значения. Хотя уникальность значений ограничения UNIQUE и PRIMARY KEY гарантируют в равной степени, в случае, когда необходимо обеспечить уникальность в столбце или комбинации столбцов, которые не являются первичными ключевыми, вместо ограничения PRIMARY KEY следует использовать ограничение UNIQUE.
В отличие от PRIMARY KEY, ограничения UNIQUE допускают значение NULL. Однако, как и всякое другое значение столбца с ограничением UNIQUE, NULL может встречаться только один раз. На ограничение UNIQUE могут ссылаться ограничения FOREIGN KEY.
При добавлении ограничения UNIQUE на уже существующий столбец или группу столбцов в таблице, компонент Компонент Database Engine по умолчанию проверяет уникальность всех существующих значений в указанных столбцах. При попытке добавить ограничение UNIQUE к столбцу, содержащему повторяющиеся значения, компонент Компонент Database Engine возвращает ошибку, а ограничение не добавляется.
Ограничения CHECK
Проверочные ограничения принудительно сохраняют целостность домена, ограничивая значения, которые может принимать один или более столбцов. Проверочное ограничение можно создать с любым логическим выражением, возвращающим значение TRUE или FALSE на основе логических операторов. Например, чтобы ограничить интервал значений столбца salary , можно создать ограничение CHECK, позволяющее столбцу принимать значения только в интервале от 15 000 до 100 000 долларов. Это ограничение исключает возможность устанавливать размер зарплаты, отличный от обычного. Логическое выражение будет иметь следующий вид: salary >= 15000 AND salary <= 100000 .
К одному столбцу можно применять несколько проверочных ограничений. Кроме того, можно применять одно проверочное ограничение к нескольким столбцам. Для этого ограничение нужно создать на уровне таблицы. Например, с помощью проверочного ограничения, распространяющегося на несколько столбцов, можно подтвердить, что в любой строке со значением USA в столбце country_region имеется также двухсимвольное значение в столбце state . Это позволяет выполнить проверку сразу нескольких условий из одного выражения.
Проверочные ограничения подобны ограничениям внешнего ключа, так как они управляют значениями, которые присваиваются столбцу. Однако они по-разному определяют допустимые значения: ограничения внешнего ключа получают список допустимых значений из другой таблицы, а проверочные ограничения определяют допустимые значения по логическому выражению.
Ограничения, которые включают явное или неявное преобразование данных, могут вызывать ошибки в операциях такого рода. Например, ограничения, заданные для таблиц, которые являются исходными при переключении секций, могут приводить к ошибкам при использовании оператора ALTER TABLE. SWITCH. Следует избегать преобразования типов данных в определениях ограничений.
Ограничения проверочных ограничений
Проверочные ограничения отклоняют значения, вычисляемые в FALSE. Поскольку значения NULL вычисляются как UNKNOWN, то их наличие в выражениях может переопределить ограничение. Например, предположим, что на столбец MyColumn типа int установлено следующее ограничение: MyColumn может содержать только значение 10 (MyColumn=10). При вставке значения NULL в столбец MyColumn компонент Компонент Database Engine вставит значение NULL и не возвратит ошибку.
Проверочное ограничение возвращает TRUE, если для проверяемого условия в любой строке таблицы отсутствует значение FALSE. Проверочное ограничение работает на уровне строки. Если в только что созданной таблице отсутствуют строки, то любое проверочное ограничение на эту таблицу считается допустимым. В результате могут возвращаться неожиданные результаты, как в следующем примере.
Ограничение CHECK показывает, что в таблице CheckTbl должна быть хотя бы одна строка. Однако поскольку в таблице нет ни одной строки, над которой можно было бы произвести проверку ограничения, инструкция ALTER TABLE завершается успешно.
Проверочные ограничения не проверяются во время выполнения инструкций DELETE. Таким образом, выполнение инструкций DELETE над таблицами с некоторыми типами проверочных ограничений может приводить к неожиданным результатам. Например, предположим, что следующие выражения выполняются над таблицей CheckTbl .
Инструкция DELETE выполняется успешно, даже если ограничение CHECK определяет, что в таблице CheckTbl должна быть хотя бы 1 строка.
Связанные задачи
Если таблица опубликована для репликации, то изменения схемы следует проводить при помощи инструкции языка Transact-SQL ALTER TABLE или объектов SMO. При изменении схемы с помощью конструктора таблиц или конструктора диаграмм баз данных конструктор пытается удалить и затем вновь создать таблицу. Но поскольку удалять опубликованные объекты нельзя, изменения схемы не будут применены.
Читайте также: