您的位置:首页 > 其它

约束总结

2016-06-12 12:36 176 查看
数据库中的五大约束:

        1.primary key 主键约束

保证实体唯一,主键不允许空,主键必须唯一

        2.foregin key 外键约束

保证表与表之间的参照完整性,外键可以空,外键和主键的名称可以不一致,外键和主键的数据类型必须严格匹配

        3.default 默认约束

当一个列值为常量值全同的时候,此时可以添加默认约束,注意:当字段数据类型为timestamp,具有identity属性不能添加默认约束

        4.unique 唯一约束

如果主键以外的字段要保证取值不重复,则可以考虑添加唯一约束

        5.check 检查约束

实现域值完整性,当一些字段取值范围有限制的时候,比如工资,年龄等字段取值范围有限制均可以考虑用check约束

/*-------------------------约束-------------------------*/

--主键约束(primary key)

--例 在sales数据库中创建一个新表department,其中包含两个字段:depart_id为char(10);depart_name为char(20)。在depart_id字段上设置主键约束。

--场景一:创建表时定义主键约束

create database sales
go
use sales
go

create table department
(
depart_id char(10) constraint pk_depart_id primary key ,
depart_name char(20)
)

--场景二:对已存在的表添加约束
语法:
alter table 表名
add constraint 约束名
primary key(字段名列表)

use studentdb
go

--将xscj表中的(学号,课程编号)设置为组合主键

alter table xscj
add constraint pk_sno_cno
primary key(学号,课程编号) --设置主键时学号,课程编号不能为空

--外键约束(foreign key)

--场景一:创建表时定义外键约束

注意:外键引用的字段必须是具有主键约束

--例 在sales数据库中创建一个新表employee_new,其中包含4个字段:emp_id为char(10),emp_name为char(10),emp_departid为char(10),emp_sex为char(2)。为该表创建一个外键约束,使emp_departid与表department中的depart_id关联。

use sales
go

create table employee_new
(
emp_id char(10),
emp_name char(10),
emp_departid char(10) constraint fk_departid foreign key references department(depart_id) ,
emp_sex char(2)
)

--场景二:对已存在的表添加外键约束
语法:
alter table 表名
add constraint 约束名
foreign key(外键列表) references 主表名(字段列表)

--以xscj表为例,使xscj表中的学号引用xsqk表中的学号,xscj表中的课程编号引用xskc表中的课程编号

alter table xscj
add constraint fk_sno
foreign key(学号) references xsqk(学号)

alter table xscj
add constraint fk_cno
foreign key(课程编号) references xskc(课程编号)

--默认约束(default)

--场景一:创建表时定义默认约束

create table test
(id int identity(1,1), --identity(seed,increasement) seed表示起始值,increasement表示增长值
sname varchar(10))

drop table test

create table test
(id int ,
sname varchar(10),
loc varchar(10) constraint df_loc default '上海'
)

--场景二:对已存在的表添加默认约束

语法:
alter table 表名
add constraint 约束名
default 默认值 for 字段名

--为xscj表添加默认约束df_grade默认值为60

alter table xscj
add constraint df_grade
default 60 for 成绩

--唯一约束(unique)

--场景一:创建表时定义唯一约束

create table teacher
(
tid int primary key, --主键自动创建聚集索引
tname varchar(20),
telphone_number int constraint uq_tel unique
)

--场景二:对已存在的表添加唯一约束

语法:
alter table 表名
add constraint 约束名
unique(字段列表)

--例 为goods_unit的code字段添加一个名为UK_code的唯一约束。

create table goods_unit
(
code int
)

alter table goods_unit
add constraint UK_code
unique(code)

--检查约束(check)

--场景一 :创建表时定义检查约束

-- 例 在sales数据库中创建一个新表employee,其中包含3个字段:emp_id为char(10),emp_name为char(10),emp_gender为char(2)。在emp_gender上设置检查约束,限制只能接受“男”或“女”的数据,而不能接受其他数据,约束名为CHK_gender。

create table employee
(
emp_id char(10),
emp_name char(10),
emp_gender char(2) constraint chk_gender check(emp_gender='男' or emp_gender='女')
)

--场景二 :对已存在的表定义检查约束定义检查约束
语法:
ALTER TABLE 表名
ADD Constraint 约束名
CHECK(约束条件表达式) --关系运算符,算术运算符,逻辑运算符

--限制xscj表中的成绩字段取值范围在0-100之间,约束名为chk_grade

use studentdb
go
alter table xscj
add constraint chk_grade
check(成绩>=0 and 成绩<=100)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: