数据库中的约束(转)
数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
一、关于约束
0、非空约束
not null
1、主键约束(PK)primary key constraint 唯一且不为空
例如对已经存在的Student表中的某一列进行添加主键约束
alter table Student
add constraint PK_Student primary key(sId)
alter table Student
add constraint PK_Student primary key(sId)
其中constraint 表示约束,PK_Student为约束名,primary key(sId)指定为哪一列添加主键约束,其中的sId表示添加约束的字段。
2、唯一约束(UQ)unique constraint唯一,允许为空,即可以再其中出现null值,但只能出现一次
alter table Student
add constraint UQ_Student_sNo unique(sNo)
alter table Student
add constraint UQ_Student_sNo unique(sNo)
unique(sNo)中的sNo表示添加unique约束的字段名
3、默认约束(DF)default constraint默认值
alter table Student
add constraint DF_Student_sSex default('男') for sSex
alter table Student
add constraint DF_Student_sSex default('男') for sSex
为student表中的sSex字段设置默认值为‘男’,即当该字段为填入数据时,数据库将自行为其加上数据内容为‘男’的数据
其中DF_Student_sSex为默认约束名
注:以上创建的主键约束 、唯一约束均存在与数据库的‘ 键’目录下,而默认约束在位于‘约束’目录下
4、检查约束(CK)check constraint范围以及格式限制
alter table Student
add constraint CK_Student_sSex check (sSex='男' or sSex='女')
alter table Student
add constraint CK_Student_sSex check (sSex='男' or sSex='女')
为student表中的sSex字段添加内容检查约束,只允许添加的内容为‘男’或者是‘女’
5、外键约束(FK)foreign key constraint表关系
alter table student
add constraint FK_Student_sClassId foreign key (sClassId) references Class(cId)
alter table student
add constraint FK_Student_sClassId foreign key (sClassId) references Class(cId)
删除主表中数据的时候,必须先删除子表中对应的数据,否则执行SQL语句时,数据库报错
注:外键同样存在于 ‘键’ 目录中。,与其它约束的创建不同的是,创建外键还需要添加对于外键表的引用,即使用references 对应相应的外键表中的列。且引用的外键表所引用的列,必须为主键或候选键,否则数据库在执行SQL语句时就会报错。
提到外键,不得不提的是级联删除以及级联修改
alter table Student
add constraint FK_Student_sClassId foreign key (sClassId) references Class(cId)
--级联删除
on delete cascade
--级联修改
on update cascade
alter table Student
add constraint FK_Student_sClassId foreign key (sClassId) references Class(cId)
--级联删除
on delete cascade
--级联修改
on update cascade
即当删除主表中的数据时,子表中与其有关的数据都将被删除。因此,此外键的创建方法在使用时需谨慎考虑
6、删除约束
alter table Student
drop constraint CK_Student_sAge
alter table Student
drop constraint CK_Student_sAge
需要通过SQL语句删约束时,通过使用Drop命令删除相应的约束名
二、在创建表的过程中添加约束
例如1
create table Student0
(
sId int identity(1,1) primary key,
sName nvarchar(10) not null,
sAge int constraint CK_Student0_sAge check(sAge >= 18) constraint DF_Student0_sAge default(18),
sClassId int constraint FK_Student0_sClassId foreign key (sClassId) references Class(cId)
)
转载于:https://my.oschina.net/VennLee/blog/92421
推荐阅读
-
Oracle中Instance实例和数据库的区别
-
不同格式的Access文件导入Mssql数据库中
-
PHP中的数据库一、MySQL优化策略综述_MySQL
-
MFC中简单的数据库文件操作(添加,修改,查找,删除)
-
为什么无法使用php中mysqli的准备语句进行数据库中数据的查询(绑定参数或者绑定结果),项目急用!该如何处理
-
thinkphp框架下读取数据库中的数据前100条数据解决思路
-
web.config中配置数据库连接的方式
-
smarty 中循环打印数据库提取的内容
-
jdbc-mysql数据库的PASSWORD函数在数据库的表中设置密码有什么限制?
-
Mysql中返回一个数据库的所有表名,列名数据类型备注_MySQL