MSSQL 创建约束

1、SQL 创建约束和主键约束

那么约束的作用是什么呢?正所谓无规矩不成方圆,MSSQL也建立一套约束机制,比如说再创建字段或者修改字段的时候,限制其输入格式、范围抑或是执行某种检查,如果不想自己用代码逻辑检查,可以利用约束来处理。

1.1约束的分类及对应语法和应用(其中[]为可选,<>为必填)

1.1.1 检查约束 (Check )和主键约束(Primay Key)

语法:
**Check** [NOT FOR REPLICATION ] (chk_expres)//chk_expres为逻辑表达式返回值为truefalse
例子:
**例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-1900and joinDate<getDate())

1.1.2 默认约束 (Default ),当用户没有为定义的Default约束的字段输入值时,自动赋约束值

语法:
Default <defau_conts> [FOR 字段名] //defau_conts为常量或者null
例子:
**例:为会员信息表中的入会时间添加Default约束为当前时间**
Create Table T_Member(Id  VarChar PRIMARY KEY,Name VarChar,
joinDate DateTime DEFAULT (getdate())
)

1.1.3 外键约束 (Foreign Key),需要建立两表间的关系并引用主表的列

语法:
FOREIGN KEY <子表字段> REFERENCES 父表<父表字段>
例子:
**主表stuInfo和从表stuMarks建立关系,关联字段stuNo**
alter table stuInfo
 add constraint FK_stuNo foreign key(stuNo)references stuinfo(stuNo)
1.1.4唯一约束 (Unique )唯一性,可以空,但只能有一个
语法:
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)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrazyMo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值