设为首页 加入收藏

TOP

sqlserver的约束参考
2015-07-24 10:28:50 来源: 作者: 【 】 浏览:1
Tags:sqlserver 约束 参考

约束 constraint

第一篇:五种约束 1. 主键约束 create table t(i int primary key) --约束名由系统自动生成 alter table dbo.t add constraint t_pk primary key (i)

创建主键时会自动创建索引,这是必然的,就算这个字段上已经有索引。除非当前表中已经含有了cluster索引,或者创建主键时指定了nonclustered关键字,否则会创建cluster索引。注意,字段必须首先定义为not null,才能给这个字段增加primary key约束。

2.Foreign Key约束 create table t (id int foreign key references t2(id)) alter table 表名 add constraint 约束名 foreign key(关联字段) references 主表(关联字段)

级联动作 外键约束,会限制插入或更新子表中字段的值,必须要事先在父表中已经存在。另外一方面,在父表中对主键做update或delete,也会检查子行(避免孤行)。 sqlserver默认是当子行存在时限制父行的删除,有子表的父表也不可被删除。 alter table dbo.t add constraint 约束名 foreign key(关联字段) references 主表(关联字段) on update no action |cascade | set null | set default on delete no action | cascade | set null | set default 默认是no action,update父行是不级联update子行。cascade是级联删除。set null与set default是sqlserver2005后引入的,即更新父行时子行置为null与置为default。

例子: create table dbo.t1(i int not null) alter table dbo.t1 add constraint pk_t1 primary key (i) create table dbo.t2 (i int not null) alter table dbo.t2 add constraint fk_t2 foreign key (i) references dbo.t1(i)
如果外键字段定义为not null,则insert或update的值必须在父表已经存在。如果定义为null,那么外键字段可以有null值,而不管父表有没有null。

3.Unique约束 create table t(i int unique) alter table 表名 add constraint 约束名 unique (字段) 众所周知,Oracle受唯一约束的字段,是允许插入多个null值的。而这些null值,也不会被插入到唯一约束所依赖的唯一索引里面。而Sqlserver里面,唯一约束的字段,只能有一个null值,并且,null值也会插到唯一索引里面。

创建Unique约束时,会自动建一个索引,就算这个字段上已经有索引。对于新建的这个索引,默认是unique noncluster的。

4.Default约束 create table t (i default '男' check (i='男' or i='女') alter table 表名 add constraint 约束名 default ('默认内容') for 字段
默认值只在insert语句中使用,在delete与update语句中会被忽略。(除非update语句里面显式说明update成default关键字) insert语句中提供了字段的任意值,就不会使用default值。

5.Check约束 create table t (i int check (i=1 or i=2)) alter table 表名 add constraint 约束名 check (字段 between 1 and 100)

6.Not Null表定义 在Sqlserver中,not null算是表定义,而不算是约束。所以我们查一个数据字典时,是查不出not null这种约束的。但是,大众一般语义上认为这也是约束。 alter table t alter column i not null alter table t alter column i null
第二篇:约束管理 删除约束 alter table 表名 drop constraint 约束名删除约束会将依赖的索引一并删除。

临时停用|启用约束 当我们想输入不满足当前约束,但又是合理的数据,我们可以暂时禁用约束,待插入数据后,再启用约束。只能针对外键约束与check约束。临时禁止约束 alter table dbo.t nocheck constraint constraint_name 禁止所有表约束: select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U' 重新启用约束 alter table dbo.t check constraint constraint_name 启用所有表约束 select 'alter table '+name+' check constraint all' from sysobjects where type='U'

对表原数据不加校验添加约束 alter table table_name with nocheck add constraint constraint_name check (age>18) 这样,表的原数据可能会不满足约束。

第三篇.数据字典

查询约束 SELECT * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where table_name in ('T')

查看某个表上约束名与状态 sp_helpconstraint [DBO.T] --status_enabled显式该约束是否启用

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇sqlserver创建用户只能访问指定视.. 下一篇MACOSX10.10上搭建Apache,PHP,M..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)