数据库中的五大约束:
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)