当前位置: > 数据库 > SQL Server 2008 >

SqlServer--代码创建约束

时间:2019-05-15 16:53来源:linux.it.net.cn 作者:IT

约束-保证数据完整性

数据库约束是为了保证数据的完整性(正确性)而实现的一套机制。当创建了主外键关系后,如果在外键表中有任何记录引用了主键表中的某条记录,则在主键表中不能删除该记录。同时主键表也不能删除。

注意:创建约束时,如果表中已经存在“非法数据”(与约束不一致的数据),那么此时是无法成功创建约束的,需要先将表中的数据做更改,然后才能创建约束。

 

非空约束 (选择复选框)not null
主键约束(PK)primary key constraint唯一且不为空(选中列,右键,设为主键)
唯一约束(UQ)unique constraint唯一,允许为空,但只能出现一次(右键,索引/键,添加)
默认约束(DF)default constraint 默人值(选中列,设置列的默认绑定值)
检查约束(CK)check constraint 范围以及格式限制(右键check约束,添加)
外键约束(FK)foreign key constraint表关系(在外键表,右键,关系,增加一个主外键关系)
增加外键约束时,设置级联更新、级联删除:

on delete cascade
on update cascade

 

--通过t-sql语句来创建约束

--新建一张表:员工信息表

create table Employees

(

EmpId int identity(1,1),

EmpName varchar(50),

EmpGender char(2),

EmpAge int,

EmpEmail varchar(100),

EmpAddress varchar(500)

)

 

 

create table Department

(

DepId int identity(1,1) ,

DepName varchar(50)

)

 

 

-----------------------手动删除、修改、增加 列-----------------------------------------------

--手动删除一列(删除EmpAddress列)

alter table Employees drop column EmpAddress

--手动增加一列(增加一列EmpAddr varchar(1000))

alter table Employees add EmpAddr nvarchar(1000)

--手动修改一下EmpEmail的数据类型(varchar(200))

alter table Employees alter column EmpEmail varchar(200)

---------------------------------手动增加、修改、删除 约束-------------------------------------------

--为EmpId增加一个主键约束

alter table Employees add constraint PK_Employees_EmpId primary key(EmpId)

--非空约束,为EmpName增加一个非空约束 not null(修改列)

alter table Employees alter column EmpName varchar(50) not null

--为EmpName增加一个唯一约束

alter table Employees add constraint UQ_Employees_EmpName unique(EmpName)

--为性别增加一个默认约束,默认为'男'

alter table Employees add constraint DF_Employees_EmpGender default('男') for EmpGender

--为性别增加一个检查约束,要求性别只能是:'男' or '女'

alter table Employees add constraint CK_Employees_EmpGender check(EmpGender='男' or EmpGender='女')

--为年龄增加一个检查约束:年龄必须在-120岁之间,含岁与岁。

alter table Employees add constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120)

 

--创建一个部门表,然后为Employee表增加一个DepId列。

alter table Employees add EmpDepId int not null

--为Department表设置主键。主键列是:DepId

alter table Department add constraint PK_Department_DepId primary key(DepId)

--增加外键约束 

alter table Employees add constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId)    on delete cascade

--增加外键约束 ,同时 添加级联删除

alter table Employees add constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId)    on delete cascade

--删除单个约束

alter table Employees drop constraint FK_Employees_Department

--一次删除多个约束

alter table Employees drop constraint

FK_Employees_Department,

CK_Employees_EmpAge,

CK_Employees_EmpGender,

DF_Employees_EmpGender,

UQ_Employees_EmpName

 

--一次增加多个约束

alter table Employees add

constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId),

constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120),

constraint CK_Employees_EmpGender check(EmpGender='男' or EmpGender='女')

 

---创建表的同时就为表增加约束

create table Employees

(

EmpId int identity(1,1) primary key,

EmpName varchar(50) not null unique check(len(EmpName)>2),

EmpGender char(2) default('男'),

EmpAge int check(EmpAge>0 and EmpAge<120),

EmpEmail varchar(100) unique,

EmpAddress varchar(500) not null,

EmpDepId int foreign key references Department(DepId) on delete cascade

)

 

create table Department

(

DepId int identity(1,1) primary key,

DepName varchar(50) not null unique

)

 



(责任编辑:IT)
------分隔线----------------------------