SQL笔记

SQL笔记--(4)--[完整性约束]

2017-03-16  本文已影响0人  FengBli

完整性约束:

保证授权用户对数据库所做的修改不会破坏数据的一致性;防止对数据的意外破坏

单个关系上的约束:


类型 含义
not null约束 已声明为主码的属性,不必显式声明为not null create table stu(name, varchar(20) not null);
unique约束 unique(A, B, C)指明A, B, C构成候选码;即:关系中的任意两个元组不能在所列属性上取值相同,但可以为null(除非已显式指明为not null) unique(name, addr)
check子句 check(P)指明:关系中每个元组都必须满足此谓词P create table section(semester varchar(6), check(semester in ('Fall', 'Summer', 'Spring', 'Winter')))

参照完整性


令关系rs的属性集分别是RS,主码分别是K_rK_s。如果要求对s中任意元组p,均存在r中元组t使得t.K_s = p.ALPHA,我们称S的子集ALPHA为参照关系rK_r外码(foreign key)

以上称为参考完整性约束,或子集依赖

create table(
...
dept_name varchar(20) references department
...);

以上代码,当违反参照完整性约束时,处理为拒绝执行导致完整性破坏的操作(即:此事务被回滚)

create table course(
...
foreign key (dept_name) references department
      on delete cascade
      on update set null
      on insert set default,
...);

以上代码,

assertion


create assertion credits_earned_constraint check
  (not exists ( select ID
                      from student
                      where tot_credits <> (select sum(credits)
                                                         from takes natural join course
                                                         where student.ID = takes.ID
                                                                   and grade is not null
                                                                   and grade <> 'F')));
上一篇 下一篇

猜你喜欢

热点阅读