一.约束的分类
实体约束:关于行的约束,比如某一行出现的值就不允许别的行出现,如主键
域约束:关于列的约束,对表中所有行的某些列进行约束,如check约束
参照完整性约束:如果某列的值必须与其他列的值匹配,那就意味着需要一个参照完整性约束,如外键约束
二.约束的命名
主键约束命名实例:
pk_Student ; (pk_表名)
check约束命名实例:
ck_Student_Name;(ck_表名_字段名)
三.键约束
1.主键约束
①.在创建表的时候创建约束:
create table student ( ID int identity not null primary key, --创建表的时候添加约束 Name ) not null )
②.在已存在的表上创建主键约束:
--在已存在的表上创建主键约束 alter table teacher add constraint pk_teacher_ID primary key(ID)
上面的语句告诉了Sql Server以下信息:
a.添加了一个约束到表中
b.约束的名称
c.什么约束(约束类型)
d.约束作用域那一列
③.创建复合主键
--创建符合约束 alter table emp add constraint [PK_emp] primary key nonclustered ( ID, Code )
2.外键约束
①.对外键的理解
两个表中存在相同的字段(如学生表和成绩表中都存在学号字段),该字段在其中一张表中能够主键(如学生表),在另一张表中不能作为主键(如成绩表),则在不能作为主键的表中称为外键
如果一个表中的若干个字段是来自另外若干个表的主键或唯一键,则这若干个字段就是外键
②.示例
新建一个班级表,字段有班级编号,班级名称
新建一个学生表,字段有学生编号,班级编号,学生姓名,将表中的班级编号字段设置为外键
代码:
--键班级表 create table class ( classid int primary key, classname ) ) --见学生表 create table students ( studentid int primary key, classid int, stuname ), foreign key(classid) references class(classid) )
向学生表中插入一行记录,此时班级表中没有内容:
,,'小明');
提示报错,因为此时班级表中没有对应的班级
先向班级表中插入一行记录,在向学生表中插入属于该班级的学生信息
,'一班'); ,,'小明');
③.在创建表时添加外键约束
--在创建表时创建外键约束 create table customer ( customerId int identity not null primary key, customerName ) not null ) create table orders ( orderId int identity not null primary key, customerId int not null foreign key references customer(customerId) --约束类型-外键-引用表(列名) )
④.在已经存在的表中添加外键约束
⑤.级联动作
⑥.外键约束的其他考虑