主键约束
不允许重复元素,避免了数据的冗余
外键约束
通过外键约束从语法上保证了本事物所关联的其他事物一定是存在的
事物和事物之间的关系是通过外键来体现的
唯一约束
保证了事物属性的取值不允许重复,但允许其中有且仅有一组为空
not null
要求用户必须为该属性赋一个值,否则语法出错
如果一个字段创建时不写null,也不写not null,则默认是null,即默认允许为空,用户可以不给该字段赋值,如果用户没有为该字段赋值,则该字段默认是null
null和default的区别
相同点
都允许用户不赋值
不同点
null修饰的字段不赋值默认是null
default修饰的字段不赋值是default
create StuInf
go
stu_id int primary key,--主键约束
stu_email nvarchar(200) unique,--唯一约束
stu_name nvarchar(60) not null,--非空约束
stu_score int check (stu_score >= 0 and stu_score <= 100),--check约束
stu_sex nchar(1) default '男'--default约束
go
insert StuInf (stu_id,stu_email,stu_name,stu_score) values(1,"123@163.com","小明",95)
insert StuInf values(2,"1234@163.com","小红",97,"女")
foreign key和组合主码
create database Test
use Test
go
create table class--班级表
(
class_id char(10) primary key,
class_sum int not null
)
go
create table teacher--教师表
(
teacher_id char(10) primary key,
teacher_name nvarchar(20) not null
)
create class_teacher_mapping--教师和班级的联系表,多对多的关系
(
class_id char(10) foreign key references class(class_id),
teacher_id char(10) foreign key references teacher(teacher_id),
course nvarchar(20) not null,
primary key(class_id,teacher_id,course)
)
关系
- 一对一:表A的主键当表B的外键,也可以把表B的主键当表A的外键
- 一对多:把表A的主键充当表B的外键(在多的一方添加外键)
- 多对多:多对多必须通过单独的一张表来表示,详情见上面教师班级之间的关系