Sql Server数据库之约束

时间:2023-11-15 16:57:08

一.约束的分类

  实体约束:关于行的约束,比如某一行出现的值就不允许别的行出现,如主键

  域约束:关于列的约束,对表中所有行的某些列进行约束,如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)
)

    向学生表中插入一行记录,此时班级表中没有内容:

,,'小明');

    提示报错,因为此时班级表中没有对应的班级

    先向班级表中插入一行记录,在向学生表中插入属于该班级的学生信息

,'一班');
,,'小明');

    Sql Server数据库之约束

    ③.在创建表时添加外键约束

--在创建表时创建外键约束
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)  --约束类型-外键-引用表(列名)
)

     ④.在已经存在的表中添加外键约束

     ⑤.级联动作

     ⑥.外键约束的其他考虑