约束4:唯一约束,Check约束和null
大家知道,关系型数据库的逻辑运算的结果是三值型的,TRUE,FALSE和UNKNOWN,特别是,NULL值和任何值都不相等,任何值和NULL的比较,返回的逻辑结果都是unknown。而NULL值在唯一约束和Check约束中的表现,不同于NULL值的定义。
唯一(Unique)约束在内部使用唯一索引来保证列值的唯一性。在一个列上创建唯一约束(unique)之后,该列允许插入null值,通常情况下,两个null值是不相等的,但是在唯一约束中,unique约束把两个null值看作是相同的,也就是说,null和null是相等的,null和其他任何非null值都不相等。
Check约束用以限制单列的可能取值范围,在check约束中(check(expression)),如果expression返回的结果是Unknown,那么check约束返回的结果是true。这就意味着,如果expression的值是null,那么该表达式的值满足check约束。
一,唯一约束
唯一约束可以创建在列级别上,也可以在表级别上。在列级别上, default 约束定义的语法是:分为column level和table level,区别在于Table Level需要制定unique约束影响的column(or columns)。
列级别定义的唯一约束的语法是:
column_name <data_type>[ CONSTRAINT constraint_name ] UNIQUE
表级别定义的唯一约束的语法是:
[ CONSTRAINT constraint_name ] UNIQUE(column [ ASC | DESC ] [ ,...n ] )
二,向现有表上增加唯一约束
1,增加unique约束
alter table dbo.dt_test_unique
add constraint uq_test_id unique nonclustered(id)
2,删除unique约束
alter table dbo.dt_test_unique
drop constraint uq_test_id
3,修改unique约束
不能在现存的表上修改unique约束,变通的方法是先删除 unique约束,后增加一个新的unique约束
alter table dbo.dt_test_unique
drop constraint uq_test_id alter table dbo.dt_test_unique
add constraint uq_test_id unique nonclustered(id)
三,Check约束
Check约束用以限制单列的可能取值范围,需要在Check约束中指定逻辑表达式,该逻辑表达式必须返回逻辑值(TRUE或FALSE),在Check中,把UNKNOWN值认为是TRUE。
check(expression)
1,在check约束中
如果expression返回的结果是Unknown,那么check返回的结果是true。
create table dbo.dt_check
(
id int null constraint ck_ID_is_Positive check(id>0)
)
插入数据,测试check约束的工作机制
insert into dbo.dt_check
values(null)
insert into dbo.dt_check
values(1)
insert into dbo.dt_check
values(0)
INSERT 语句与 CHECK 约束"ck_ID_is_Positive"冲突。该冲突发生于数据库"db_study",表"dbo.dt_check", column 'id'。
语句已终止。
NULL和1 插入成功,而0插入失败。
2,在表级别上定义Check约束
在表级别上定义Check约束,可以对多列的可能取值进行限制
create table dbo.dt_check
(
id int null ,
code int null,
constraint ck_IDCode_is_Positive check(id>0 and code >0)
)
在一个已经创建的table上,通过alter table命令来增加、修改和删除check约束,添加的约束是表级别的约束
3,增加check约束
alter table dbo.dt_check
add constraint ck_ID_is_Positive check(id>0)
4,删除check约束
alter table dbo.dt_check
drop constraint ck_ID_is_Positive
5,修改Check约束
没法直接修改Check约束,变通方法是:必须先删除约束,然后添加新的check约束
alter table dbo.dt_check
drop constraint ck_ID_is_Positive alter table dbo.dt_check
add constraint ck_ID_is_Positive check(id>0)
6,通过alter table命令增加新的列,并在列级别上创建check 约束
alter table dbo.dt_check
add sex char(1) not null
constraint ck_sex check(sex in('M','F'))
参考文档:
table_constraint (Transact-SQL)
约束4:唯一约束,Check约束和null的更多相关文章
- SQL PRIMARY KEY 约束\SQL FOREIGN KEY 约束\SQL CHECK 约束
SQL PRIMARY KEY 约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录. 主键必须包含唯一的值. 主键列不能包含 NULL 值. 每个表都应该有一个主键,并且每个表只能有一个主 ...
- SQLServer之CHECK约束
CHECK约束添加规则 1.CHECK 约束用于限制列中的值的范围. 2.Check约束通过逻辑表达式来判断数据的有效性,用来限制输入一列或多列的值的范围,在列中更新数据时,所要输入的内容必须满足Ch ...
- SQL CHECK 约束
SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那么该列只允许特定的值. 如果对一个表定义 CHECK 约束,那么此约束会在特定的列中对值进行限 ...
- SQL-W3School-高级:SQL CHECK 约束
ylbtech-SQL-W3School-高级:SQL CHECK 约束 1.返回顶部 1. SQL CHECK 约束 CHECK 约束用于限制列中的值的范围. 如果对单个列定义 CHECK 约束,那 ...
- mysql CHECK约束 语法
mysql CHECK约束 语法 作用:CHECK 约束用于限制列中的值的范围. 直线电机 说明:如果对单个列定义 CHECK 约束,那么该列只允许特定的值.如果对一个表定义 CHECK 约束,那么此 ...
- 约束Constraints--主键约束、外键约束、唯一约束、检查约束、默认约束、NOT NULL约束、列约束与表约束、创建约束、删除约束
约束 Including Constraints 以下内容转自:https://www.cnblogs.com/wcl2017/p/7043939.html和http://blog.csdn.ne ...
- SQL Server(第一章) 创建表 删除表 创建主键约束、唯一约束、外键约束、CHECK约束、默认约束
1.Employees员工表 /** 创建Employees员工表 **/ USE TSQL2012 IF OBJECT_ID('dbo.Employees','U') IS NOT NULL DRO ...
- SQLServer 中有五种约束, Primary Key 约束、 Foreign Key 约束、 Unique 约束、 Default 约束和 Check 约束
一直在关注软件设计方面,数据库方面就忽略了很多,最近在设计数据库时遇到了一些小麻烦,主要是数据库中约束和性能调优方面的应用,以前在学习 Sql Server 2000,还有后来的 Sql Server ...
- SQL Server 创建约束图解 唯一 主键
SQLServer中有五种约束,Primary Key约束.Foreign Key约束.Unique约束.Default约束和Check约束,今天使用SQL Server2008来演示下这几种约束的创 ...
随机推荐
- 关于WSL(Windows上的Linux子系统)的简单介绍及安装
WSL,Windows Subsystem for Linux,就是之前的Bash on [Ubuntu on] Windows(嗯,微软改名部KPI++),在wsl环境下我们可以运行一些Linux程 ...
- Win10下安装sulley
sulley是一款针对网络协议的fuzz框架,记录下安装过程备忘 1.安装MinGW 下载:https://github.com/develersrl/gccwinbinaries/releases/ ...
- Sharepoint 2013/2010 登陆身份验证
SharePoint 2013 and SharePoint 2010登陆身份验证格式: <IdentityClaim>:0<ClaimType><ClaimValueT ...
- November 14th 2016 Week 47th Monday
There are far, far better things ahead than any we leave behind. 前方,有更美好的未来. Can I see those better ...
- Spring各版本源码下载
spring framework 各版本源码下载地址 现在spring的源码下载地址真是不好找,这次终于找到了.记录一下,以帮助需要的朋友. https://github.com/spring-pro ...
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
http://blog.csdn.net/zj510/article/details/39400087 内存管理有三种方式: 1. 虚拟内存,VirtualAlloc之类的函数 2. 堆,Heapxx ...
- hdu 4803 Poor Warehouse Keeper(贪心+数学)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011328934/article/details/26005267 题目链接:hdu 4803 P ...
- 用php代码统计数据库中符合条件的行数
$sql1 = "select count(*) from t_user where age<17"; $data1 = mysql_query($sql1); $rows1 ...
- 【AT987】高橋君
题目 成爷爷一眼秒,\(tql!!!\) 多组询问,求 \[\sum_{i=0}^kC_{n}^i \] 发现\(k<=n\)啊,于是我们可以把一组询问抽象成一个区间\([k,n]\) 左指针的 ...
- Kubernetes 1.6新特性
Kubernetes 1.6已结发布,包括9个Stable特性.12个Beta特性.8个Alpha特性,共29个新特性.Kubernetes 1.6重点关注集群规模扩展和自动化.目前最多支持5000个 ...