SQL Server Check 约束用法详解

一、定义:

       CHECK 约束用于限制列中的值的范围。

       如果对单个列定义 CHECK 约束,那么该列只允许特定的值。

       如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限制。

 

做数据库,就必须要会写约束。


运算符


含义


 


=


等于


 


>


大于


 


<


小于


 


>=


大于或等于


 


<=


小于或等于


 


<>


不等于


 


!


(Java语言中为not)


 


通配符


解释


示例


‘_’


一个字符


A Like 'C_'


%


任意长度的字符串


B Like 'CO_%'


[ ]


括号中所指定范围内的一个字符


C Like '9W0[1-2]'


[^]


不在括号中所指定范围内的一个字符


D Like ‘%[A-D][^1-2]'

二、将新的 CHECK 约束附加到表或列
    1、附加新的 CHECK 约束  
  (1)、在数据库关系图中,右击包含约束的表,然后从快捷菜单中选择"约束"命令。
  -或-
  
  为将包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"约束"命令。
  
  (2)、选择"新建"命令。"选定的约束"框显示由系统分配的新约束名。系统分配的名称以"CK_"开始,后跟表名。
  
  
  在"约束表达式"框中,为 CHECK 约束键入 SQL 表达式。例如,若要将 authors 表中 state 列的输入项限制为 New York,请键入:
  state = 'NY'
  或者,若要要求 zip 列中的输入项为 5 位数字,请键入:
  
  zip LIKE '[0-9][0-9][0-9][0-9][0-9]' 中间不能有空格
  
  若要给约束提供一个不同的名称,请在"约束名"框中键入名称。
  
  
  用复选框控制何时强制约束:

  若要在创建约束前对现有数据测试约束,请选中"创建中检查现存数据"复选框。
  
  
  若要在该表中发生复制操作时强制约束,请选中"对复制强制约束"复选框。
  
  
  若要在该表中插入或更新行时强制约束,请选中"对 INSERT 和 UPDATE 强制约束"复选框。

  
  2、定义 CHECK 约束表达式
  
  当将 CHECK 约束附加到表或列时,必须包括 SQL 表达式。
  
  可以创建简单的约束表达式在简单条件下检查数据;或使用布尔运算符创建复杂的约束表达式以在多种条件下检查数据。例如,假设 authors 表中有一个 zip 列,该列要求 5 位数字的字符串。下面的示例约束表达式确保只允许 5 位数字:
  
  zip LIKE '[0-9][0-9][0-9][0-9][0-9]'
  或者假设 sales 表中有一个名为 qty 的列,该列要求大于 0 的值。下面的示例约束确保只允许正值:
  
  qty > 0
  或者假设 orders 表限制所有信用卡订单可接受的信用卡类型。下面的示例约束确保如果用信用卡发出订单,则只接受 Visa、MasterCard 或 American Express:
  
  NOT (payment_method = 'credit card') OR
  (card_type IN ('VISA', 'MASTERCARD', 'AMERICAN EXPRESS'))

  3、定义约束表达式
  
  创建新的 CHECK 约束。
  
  在属性页的"CHECK 约束"选项卡中,使用下列语法在"约束表达式"框中键入表达式:

  {constant | column_name | function | (subquery)}
  [{operator | AND | OR | NOT}
  {constant | column_name | function | (subquery)}...]
 

二、修改 CHECK 约束
  当要更改约束表达式,或更改对特定条件启用或禁用约束的选项时,修改 CHECK 约束。
  
  I、在数据库关系图中右击包含约束的表,然后从快捷菜单中选择"属性"命令。
  -或-
  
  为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
  
  II、选择"CHECK 约束"选项卡。
  
  III、从"选定的约束"列表中,选择要更改的约束。
     IV、填写修改规则。

    当保存表或关系图时,约束即在数据库内被更新。

三、删除 CHECK 约束 

    当要删除对约束表达式包含的列所接受数据值的限制时,删除 CHECK 约束。
  
  
  I、在数据库关系图中右击包含约束的表,然后从快捷菜单中选择"属性"命令。
  -或-
  
  为包含约束的表打开表设计器,在表设计器中右击,然后从快捷菜单中选择"属性"命令。
  
  II、选择"CHECK 约束"选项卡。
  
  III、从"选定的约束"列表中选择约束。
  
  IV、选择"删除"按钮。

  注意  选择"删除"按钮将导致一个无法撤消的操作,而且不保存对数据库关系图所做的所有其它更改。若要撤消该操作,请不保存更改即关闭当前的数据库关系图和所有其它打开的数据库关系图。
  
  当保存表或关系图时,约束即从数据库中被删除。

 份证号码的约束表达式怎么写?

…….


逻辑表达式


说明


示例


AND


逻辑与


1 AND 1 = ; 1 AND 0 = 0; 0 AND 0 = 0;


OR


逻辑或


1 OR 1 = 1; 1OR 0 = 1; 0 OR 0 = 0;


NOT


逻辑非


NOT 1 = 0; NOT 0 = 1;

 

 

     右击选择表中的check约束--添加约束--写入常规表达式(sage代表代表某一字段名,并且是该字段的值)

                    sage.value >15 && sage.value<31

                    sage.value == sage

                    >  == >

                    && == and

                    sage > 15 and sage<31

                    约束电话格式:13.........  15.......  18.....   147.......

                    if(stel像13....)

                    stel like '[1]'  表示stel电话的值第一个字符是1并且只能是1个字符

                    ([stel] like '[1][3][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'

                     OR [stel] like '[1][5][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')

                     

                    验证邮箱

                           sqqemail like '[^0-9]%[@][q][q][.][c][o][m]'

                           表示第一个字符不允许是数字,第一个字符与@符号之间是任意字符。后面是固定格式

时间: 2024-11-01 01:39:47

SQL Server Check 约束用法详解的相关文章

SQL Server时间函数用法详解

SQL中的时间函数非常有用,特别是在我们进行初始赋值.复杂查询的时候,就显得特别方便. 1.获得系统当前时间 select getdate() 2.DateName (datepart , date )返回表示指定日期的指定日期部分的字符串. --今天是2009-2-24--星期二 SELECT DATENAME(year, getdate()) AS 'Year Name' --------返回:2009 SELECT DATENAME(month, getdate()) AS 'Month

SQL Server datediff函数用法详解

DATEDIFF() 函数返回两个日期之间的天数. 语法 DATEDIFF(datepart,startdate,enddate)startdate 和 enddate 参数是合法的日期表达式. 使用如下 SELECT 语句:  代码如下 复制代码 SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate结果: DiffDate 1 巧用datediff获得时间戳  代码如下 复制代码 1> SELECT datediff(ss,'19

SQL Server事务隔离级别详解

SQL Server事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述      隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别.事务隔离级别总共有6个隔离级别:READ UNCOMMITTED(未提交读,读脏),相当于(NOLOCK)

SQL Server CHARINDEX和PATINDEX详解

server|详解 SQL Server CHARINDEX和PATINDEX详解        假如你写过很多程序,你可能偶尔会碰到要确定字符或字符窜串否包含在一段文字中,在这篇文章中,我将讨论使用CHARINDEX和PATINDEX函数来搜索文字列和字符串.我将告诉你这两个函数是如何运转的,解释他们的区别.同时提供一些例子,通过这些例子,你可以可以考虑使用这两个函数来解决很多不同的字符搜索的问题.        CHARINDEX和PATINDEX函数常常用来在一段字符中搜索字符或者字符串.

SQL Server 事务隔离级别详解

原文:SQL Server 事务隔离级别详解 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设计数据库事务级别 SQL 事务隔离级别 概述      隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用. 步骤 事务隔离级别通过影响读操作来间接地影响写操作:可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务隔离级别.事务隔离级别总共有6个隔离级别:READ UNCOMMITTED(未提交读,读脏),相当于(NOL

SQL SERVER分区具体例子详解

原文:SQL SERVER分区具体例子详解 在日常工作中,我们会遇到以下的情况,一个表每日数万级的增长,而查询的数据通常是在本月或今年,以前的数据偶尔会用到,但查询和插入的效率越来越慢,用数据库分区会有助于解决这个问题.关于分区的理论知识网上很多我这里就不在累赘,我从一个实际例子出发,看如何将一个已经运行了很长时间的普通表进行分区. 提出问题 需解决问题:有一个数据表数据很大,我们通常的查询是在一个季度中.我们需要将以往年份的数据按不同年份存在文件组里,当年的数据分为4个季度存,如果到了新的一年

SQL Server 2008日志传送详解

一.什么是日志传送? 原理很简单,三个动作六个字:备份->复制->恢复. 如果由人来完成这个三个动作,只能叫日志搬运工:而由SQL Server Job自动完成,就叫日志传送.同样的事情,不一样的档次,所以叫法也不一样. 二.日志传送能解决什么问题? 解决数据库的多服务器热备份问题.多台服务器定时备份,随时可以作为主数据库服务器的替补. 三.日志传送的优点是什么? 简单!比SQL Server的数据库复制.镜像简单多了. 四.日志传送的缺点是什么? 日志文件的传输只支持Windows文件共享的

SQL Server 事务和锁详解

最近在项目中进行压力测试遇到了数据库的死锁问题,简言之,如下的代码在 SERIALIZABLE 隔离级别造成了死锁:  代码如下 复制代码 SELECT @findCount=COUNT(id) FROM MyTable WHERE [fk_related_id]=@Argument IF (@findCount > 0) BEGIN ROLLBACK TRANSACTION RETURN ERROR_CODE END INSERT INTO MyTable ([fk_related_id],-

Microsoft SQL Server数据库开发问题详解

我要强调的是,从技术角度来说,不使用T-SQL来编写存储过程是可能的.那么有没有理由这么做呢?一种情况就是这是一个用来从普通文件或者网络服务中检索数据的CLR存储过程,并将数据格式设置为行集.这里可能就会用到不需要T-SQL的操作--但是这并不是对T -SQL存储过程能力的一个很好的比喻. 1.SQL Server 2005中的存储过程并发问题 问:我在SQL Server2005中遇到了并发问题.我持有车票的公共汽车上有一些空闲的座位.我在插入销售的查票之前,需要查看是否还有空闲的座位.我的存