sql server中check约束
sql server中check约束CHECK约束约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另外一个列的值,只要这些列都在同一个表中以及值是在更新或者插入的同一行中。CHECK约束还可以用于检查列值组合是否满足某一个标准。
可以像使用where子句一样的规则来定义CHECK约束,几乎所有可以放到where子句的条件都可以放到该约束中,而且和其他选择(规则和触发器)相比,CHECK约束执行速度更快。
一、check索引实例
1、在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数
CREATE TABLE Persons
(
Id_P int NOT NULL CHECK (Id_P>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
如果需要命名 CHECK 约束,以及为多个列定义 CHECK 约束,请使用下面的 SQL 语法
CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (Id_P>0 AND City='Sandnes')
)
(2)、在表已存在的情况下为 "Id_P" 列创建 CHECK 约束
ALTER TABLE Persons
ADD CHECK (Id_P>0)
(3)、撤销 CHECK 约束
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
2、在已存在的表Account中添加一个CHECK约束 (年龄必须大于18)
alter table Account add constraint CN_AccountAge check (Account_Age > 18);如果此时视图添加一条不满足的记录
insert into Account values (22,'洪',17)报如下错误
消息 547,级别 16,状态 0,第 1 行 INSERT 语句与 CHECK 约束"CN_AccountAge"冲突。该冲突发生于数据库"Nx",表"dbo.Account", column 'Account_Age'。 语句已终止。
二、SQL Server中使用Check约束对性能的提升
例如下图