CHECK SQL
Можно устанавливать любое число ограничений для данных, вводимых в таблицы, чтобы, например, ограничить диапазон вводимых данных. Опция CHECK обеспечивает ограничение, которое позволяет установить условие, которому должно удовлетворять значение, вводимое в таблицу, прежде чем оно будет принято.
Ограничение CHECK
Ограничение CHECK состоит из ключевого слова CHECK, сопровождаемого предложением предиката, который использует указанное поле. Любая попытка модифицировать или вставить значение поля, которое могло бы сделать этот предикат неверным будет отклонена.
SQL CHECK в CREATE TABLE
CHECK SQL. Пример 1
CREATE TABLE Student ( Kod_stud integer NOT NULL PRIMARY KEY, Fam char (30) NOT NULL UNIQUE, Adres char (50), Ball decimal CHECK ( Ball > 0));
Ограничение CHECK SQL. Пример 2
Можно использовать ограничение CHECK чтобы защитить от ввода в поле определенных значений, и таким образом предотвратить ошибку.
CREATE TABLE Student ( Kod_stud integer NOT NULL PRIMARY KEY, Fam char (30) NOT NULL UNIQUE, Adres char (50), Ball decimal CHECK ( Ball > 0), Form_ob char(10) CHECK (Form_ob IN (‘Дневная’, ‘Заочная’, ‘Вечерняя’));
CHECK SQL. Пример 3
Можно также использовать CHECK в качестве табличного ограничения. Это полезно в тех случаях когда необходимо включить более одного поля строки в условие.
CREATE TABLE Student (Kod_stud integer NOT NULL PRIMARY KEY, Fam char (30) NOT NULL UNIQUE, Adres char (50), Ball decimal, Form_ob char(10), CHECK (Ball > 50 OR Form_ob = ‘Дневная’));
Если строка вставляется в таблицу и не предоставляются значения для каждого поля, SQL должен иметь значения по умолчанию для заполнения ими значений полей, не заданных явно в команде; в противном случае команда вставки должна быть отвергнута. Наиболее распространенным значением по умолчанию является значение NULL. Это значение является значением по умолчанию для любого столбца, ели для него не указано ограничение NOT NULL, либо не указано значение, присвоенное по умолчанию. Для назначения иного значения по умолчанию используют ограничение DEFAULT.
CREATE TABLE Student
( Kod_stud integer NOT NULL PRIMARY KEY,
Fam char (30) NOT NULL UNIQUE,
Ball decimal CHECK (Ball > 0),
Stip decimal DEFAULT =300);
SQL CHECK в ALTER TABLE
Для создания ограничения для столбца «Year» в таблице «Books», когда таблица уже создана, необходимо использовать следующий SQL
Ограничения уникальности и проверочные ограничения
UNIQUE ограничения и CHECK ограничения — это два типа ограничений, которые можно использовать для обеспечения целостности данных в таблицах SQL Server. Это важные объекты базы данных.
Эта статья состоит из следующих разделов:
- Ограничения UNIQUE
- Ограничения CHECK
- Связанные задачи
Ограничения UNIQUE
Ограничения — это правила, применяемые ядро СУБД SQL Server. Например, можно использовать UNIQUE ограничения, чтобы убедиться, что повторяющиеся значения не вводятся в определенных столбцах, которые не участвуют в первичном ключе. UNIQUE Хотя ограничение и PRIMARY KEY ограничение применяют уникальность, используйте UNIQUE ограничение вместо PRIMARY KEY ограничения, если вы хотите применить уникальность столбца (или сочетание столбцов), который не является первичным ключом.
В отличие от PRIMARY KEY ограничений, UNIQUE ограничения позволяют использовать значение NULL . Однако, как и в случае с любым значением, участвующим в UNIQUE ограничении, допускается только одно значение NULL для каждого столбца. Ограничение UNIQUE может ссылаться на FOREIGN KEY ограничение.
UNIQUE При добавлении ограничения в существующий столбец или столбцы таблицы по умолчанию ядро СУБД проверяет существующие данные в столбцах, чтобы убедиться, что все значения уникальны. UNIQUE Если ограничение добавляется в столбец с повторяющимися значениями, ядро СУБД возвращает ошибку и не добавляет ограничение.
Ядро СУБД автоматически создает UNIQUE индекс для принудительного UNIQUE применения требования уникальности ограничения. Таким образом, если предпринята попытка вставить повторяющуюся строку, ядро СУБД возвращает сообщение об ошибке, которое указывает UNIQUE , что ограничение было нарушено, и не добавляет строку в таблицу. Если кластеризованный индекс явно не указан, уникальный некластеризованный индекс создается по умолчанию для принудительного UNIQUE применения ограничения.
CHECK, ограничение
CHECK ограничения обеспечивают целостность домена путем ограничения значений, принятых одним или несколькими столбцами. Можно создать CHECK ограничение с любым логическим (логическим) выражением, возвращающим TRUE или FALSE основанным на логических операторах. Например, диапазон значений для salary столбца может быть ограничен путем создания CHECK ограничения, позволяющего использовать только данные, которые варьируются от $15000 до $100 000. Это ограничение исключает возможность устанавливать размер зарплаты, отличный от обычного. Логическое выражение будет иметь следующий вид: salary >= 15000 AND salary
К одному столбцу можно применить несколько CHECK ограничений. Можно также применить одно CHECK ограничение к нескольким столбцам, создав его на уровне таблицы. Например, ограничение с несколькими столбцами CHECK можно использовать для подтверждения того, что любая строка со country_region значением USA столбца также имеет двухзначное значение в столбце state . Это позволяет выполнить проверку сразу нескольких условий из одного выражения.
CHECK ограничения похожи на FOREIGN KEY ограничения, которые управляют значениями, помещающимися в столбец. Разница заключается в том, как они определяют допустимые значения: FOREIGN KEY ограничения получают список допустимых значений из другой таблицы, а CHECK ограничения определяют допустимые значения из логического выражения.
Ограничения, включающие неявное или явное преобразование типов данных, могут привести к сбою определенных операций. Например, такие ограничения, определенные в таблицах, которые являются источниками переключения секций, могут привести к сбою ALTER TABLE. SWITCH операции. Следует избегать преобразования типов данных в определениях ограничений.
Ограничения ограничений CHECK
CHECK ограничения отклоняют значения, которые оцениваются FALSE . Поскольку значения NULL оцениваются как UNKNOWN, их присутствие в выражениях может переопределить ограничение. Например, предположим, что вы помещете ограничение в столбец MyColumn int, указывающий, что MyColumn может содержать только значение 10 ( MyColumn=10 ). Если вставить значение NULL MyColumn , ядро СУБД вставляется NULL и не возвращает ошибку.
Ограничение CHECK возвращается TRUE , когда условие проверка не является FALSE ни одной строкой в таблице. Ограничение CHECK работает на уровне строки. Если созданная таблица не имеет строк, CHECK то любое ограничение для этой таблицы считается допустимым. В результате могут возвращаться неожиданные результаты, как в следующем примере.
CREATE TABLE CheckTbl (col1 INT, col2 INT); GO CREATE FUNCTION CheckFnctn() RETURNS INT AS BEGIN DECLARE @retval INT; SELECT @retval = COUNT(*) FROM CheckTbl; RETURN @retval; END; GO ALTER TABLE CheckTbl ADD CONSTRAINT chkRowCount CHECK (dbo.CheckFnctn() >= 1); GO
Ограничение CHECK показывает, что в таблице CheckTbl должна быть хотя бы одна строка. Тем не менее, поскольку в таблице нет строк, для которых проверка условие этого ограничения, ALTER TABLE оператор завершается успешно.
CHECK ограничения не проверяются во время DELETE инструкций. Поэтому выполнение DELETE инструкций в таблицах с определенными типами ограничений проверка может привести к непредвиденным результатам. Например, предположим, что следующие выражения выполняются над таблицей CheckTbl .
INSERT INTO CheckTbl VALUES (10, 10); GO DELETE CheckTbl WHERE col1 = 10;
Инструкция DELETE выполняется успешно, даже если ограничение CHECK определяет, что в таблице CheckTbl должна быть хотя бы 1 строка.
Если таблица опубликована для репликации, то изменения схемы следует проводить при помощи инструкции языка Transact-SQL ALTER TABLE или объектов SMO. При изменении схемы с помощью конструктора таблиц или конструктора диаграмм баз данных конструктор пытается удалить и затем вновь создать таблицу. Вы не можете удалить опубликованные объекты, поэтому изменение схемы завершится ошибкой.
Связанные задачи
| Задача | Статья |
|---|---|
| Описывает, как создать ограничение уникальности. | Создание уникальных ограничений |
| Описывает, как изменить ограничение уникальности. | Изменение ограничений уникальности |
| Описывает, как удалить ограничение уникальности. | Удаление ограничений уникальности |
| Описывает создание ограничения проверка. | Создание проверочных ограничений |
| Описывает, как отключить проверочное ограничение при добавлении или обновлении агентом репликации данных в таблице. | Отключение проверочных ограничений для репликации |
| Описывает, как отключить проверочное ограничение при добавлении, обновлении или удалении данных из таблицы. | Отключение проверочных ограничений в инструкциях INSERT и UPDATE |
| Описывает, как изменить выражение ограничения или параметры, которые включают или отключают ограничение применительно к определенным условиям. | Изменение проверочных ограничений |
| Описывает, как удалить проверочное ограничение. | Удаление проверочных ограничений |
| Описывает, как просматривать свойства проверочного ограничения. | Ограничения уникальности и проверочные ограничения |
SQL — Ограничение CHECK
Ограничение CHECK используется для ограничения диапазона значений, который может быть помещен в столбец. Если вы определяете ограничение CHECK для одного столбца, оно допускает только определенные значения для этого столбца. Если вы определяете ограничение CHECK для таблицы, оно может ограничить значения в определенных столбцах на основе значений в других столбцах в строке.
SQL CHECK на CREATE TABLE
Следующий SQL создает ограничение CHECK в столбце «age», когда создается таблица «users». Ограничение CHECK гарантирует, не может быть пользователя с возрастом старше 60 лет:
CREATE TABLE users ( user_id int NOT NULL, name varchar(255) NOT NULL, fullname varchar(255), age int, CHECK (age>=60) );
Чтобы разрешить именовать ограничение CHECK и определить ограничение CHECK для нескольких столбцов, используйте следующий синтаксис SQL:
CREATE TABLE users ( user_id int NOT NULL, name varchar(255) NOT NULL, fullname varchar(255), age int, balance int, CONSTRAINT CHK_Users CHECK (age>=60 AND balance = 500) );
SQL CHECK на ALTER TABLE
Чтобы создать ограничение CHECK в столбце «age», когда таблица уже создана, используйте следующее:
ALTER TABLE users ADD CHECK (age>=60);
Чтобы разрешить именовать ограничение CHECK и определить ограничение CHECK для нескольких столбцов, используйте следующий синтаксис:
ALTER TABLE users ADD CONSTRAINT CHK_UsersAge CHECK (age>=60 AND country='Spain');
DROP a CHECK
Чтобы удалить ограничение CHECK, используйте следующий SQL:
ALTER TABLE users DROP CHECK CHK_UsersAge;
SQL CHECK
CHECK используется для ограничения диапазона значений, который может быть помещен в столбец.
Если вы определяете контрольное ограничение для одного столбца, оно допускает только определенные значения для этого столбца.
Если вы определяете контрольное ограничение для таблицы, оно может ограничивать значения в определенных столбцах на основе значений в других столбцах строки.
Ограничение CHECK в CREATE TABLE
Следующий SQL создает контрольное ограничение для столбца «Age» при создании таблицы «Persons». Ограничение проверки гарантирует, что вы не можете иметь ни одного человека моложе 18 лет:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CHECK (Age>=18)
);
SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
Чтобы разрешить именование контрольного ограничения и определить контрольное ограничение для нескольких столбцов, используйте следующий синтаксис SQL:
MySQL / SQL Server / Oracle / MS Access:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City=’Sandnes’)
);
Ограничение CHECK в ALTER TABLE
Чтобы создать контрольное ограничение для столбца «Age», когда таблица уже создана, используйте следующий SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Age>=18);
Чтобы разрешить именование контрольного ограничения и определить контрольное ограничение для нескольких столбцов, используйте следующий синтаксис SQL:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City=’Sandnes’);
Ограничение CHECK с DROP
Чтобы удалить ограничение CHECK, используйте следующий SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
Мы только что запустили
SchoolsW3 видео
курс сегодня!
Сообщить об ошибке
Если вы хотите сообщить об ошибке или внести предложение, не стесняйтесь отправлять на электронное письмо:
Ваше предложение:
Спасибо Вам за то, что помогаете!
Ваше сообщение было отправлено в SchoolsW3.
Schoolsw3 оптимизирован для бесплатного обучения, проверки и подготовки знаний. Примеры в редакторе упрощают и улучшают чтение и базовое понимание. Учебники, ссылки, примеры постоянно пересматриваются, чтобы избежать ошибок, но не возможно гарантировать полную правильность всего содержания. Некоторые страницы сайта могут быть не переведены на РУССКИЙ язык, можно отправить страницу как ошибку, так же можете самостоятельно заняться переводом. Используя данный сайт, вы соглашаетесь прочитать и принять Условия к использованию, Cookies и политика конфиденциальности.