那么约束的作用是什么呢?正所谓无规矩不成方圆,MSSQL也建立一套约束机制,比如说再创建字段或者修改字段的时候,限制其输入格式、范围抑或是执行某种检查,如果不想自己用代码逻辑检查,可以利用约束来处理。
**Check** [NOT FOR REPLICATION ] (chk_expres)//chk_expres为逻辑表达式返回值为true或false
**例1:建立一个学生表,并使用CHECK约束对分数进行大于等于0小于等于100的约束**
Create Table T_Score(Id VarChar PRIMARY KEY,Name VarChar,
Goal Int Not Null CHECK (Goal>=0 and Goal<=100) )
**例2:在数据库Project中的工作关系表添加Check约束确保加入日期和接受日期范围合理**
Use Project
Alter Table T_WorkRelation
Add
CONSTRAINT CHECK_DATE CHECK (JoinDate >’01-01-1900’ and joinDate
Default [FOR 字段名] //defau_conts为常量或者null
**例:为会员信息表中的入会时间添加Default约束为当前时间**
Create Table T_Member(Id VarChar PRIMARY KEY,Name VarChar,
joinDate DateTime DEFAULT (getdate())
)
FOREIGN KEY <子表字段> REFERENCES 父表<父表字段>
**主表stuInfo和从表stuMarks建立关系,关联字段stuNo**
alter table stuInfo
add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)
CONSTRAINT 约束名 (字段名1,字段名2)
**添加唯一约束(身份证号唯一,因为每个人的都不一样)**
alter table stuInfo
add constraint UQ_stuID unique(stuID)
create table tbDept
(
dId int identity ( 1, 1) primary key not null,
dName char ( 20) not null,
pId int not null,
pDesc text
)
insert into tbDept values ( ' 技术部 ' , 0, ' 的短短的 ' )
insert into tbDept values ( ' 业务部 ' , 0, ' 叮叮当当 ' )
insert into tbDept values ( ' 财务部 ' , 0, ' 叮叮咚咚大 ' )
create table MyUserInfo
(
UserId int identity ( 10, 10) not null
constraint PK_UserId_MyUserInfo
primary key clustered , -- 主键
--1 创建外键
dId int not null
constraint FK_MyUserInfo_tbDept
foreign key
references tbDept( dId),
UserCIP char ( 18) not null
constraint UQ_UserCIP_MyUserInfo unique , -- 唯一约束
UserJSID char ( 6) not null
constraint UQ_userJSID_MyUserId unique , -- 唯一约束
UserName varchar ( 20) not null,
UserTel varchar ( 12) null,
UserMolt int null,
UserAge int not null -- 用户年龄在2-120岁之间
constraint CHK_UserAge_MyUserInfo check ( UserAge > 2 && UserAge < 120)
UserSex char ( 2) not null -- 用户性别男或女
constraint CHK_UserSex_MyUserInfo check ( UserSex= ' 男 ' or UserSex= ' 女 ' ),
-- 用户名和电话号码按 DESC 排序组合是唯一的
constraint UQ_UserName_UserTel_MyUserInfo unique ( UserName desc , UserTel desc ),
--constraint UQ_UserName_UserTel_MyUserInfo unique(UserName desc |asc,UserTel desc |asc)
----constraint UQ_UserName_UserTel_MyUserInfo unique(UserName ,UserTel desc |asc)
-- 用户名和手机号码按 DESC 排序组合是唯一的
constraint UQ_userName_UserMolt_MyUserInfo unique ( UserName desc , UserMolt desc )
);
--2 创建外键
ALTER TABLE MyUserInfo
ADD
constraint FK_MyUserInfo_tbDept
foreign key ( dId)
references tbDept( dId);
--3 创建外键
ALTER TABLE MyUserInfo
with nocheck ADD
constraint FK_MyUserInfo_tbDept
Foreign Key ( dId)
references tbDept( dId)
--4 创建外键
ALTER TABLE MyUserInfo
with check ADD
constraint FK_MyUserInfo_tbDept
Foreign Key ( dId)
references tbDept( dId)
约束(Constraint)是Microsoft SQL Server 提供的自动保持数据库完整性的一种方法,定义了可输入表或表的单个列中的数据的限制条件。在SQL Server 中有5 种约束:主关键字约束(Primary Key Constraint)、外关键字约束(Foreign Key Constraint)、惟一性约束(Unique Constraint)、检查约束(Check Constraint)和缺省约束(Default Constraint)。