您的位置:首页 > 数据库 > 数据库管理 > 正文

sql server中check约束

更多 时间:2015-3-6 类别:数据库 浏览量:403

sql server中check约束

sql server中check约束

CHECK约束约束可以和一个列关联,也可以和一个表关联,因为它们可以检查一个列的值相对于另外一个列的值,只要这些列都在同一个表中以及值是在更新或者插入的同一行中。CHECK约束还可以用于检查列值组合是否满足某一个标准。

可以像使用where子句一样的规则来定义CHECK约束,几乎所有可以放到where子句的条件都可以放到该约束中,而且和其他选择(规则和触发器)相比,CHECK约束执行速度更快。

 

一、check索引实例

1、在 "Persons" 表创建时为 "Id_P" 列创建 CHECK 约束。CHECK 约束规定 "Id_P" 列必须只包含大于 0 的整数

  •  
  •  
  • (1)、创建表时创建check索引
  •  
  •  
  • SQL 代码   复制
  • 
    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 语法

     

  • 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约束对性能的提升

    例如下图

     

    标签:sql server
    您可能感兴趣