美文网首页SQL笔记
SQL笔记--(4)--[完整性约束]

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

作者: FengBli | 来源:发表于2017-03-16 19:39 被阅读0次

    完整性约束:

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

    单个关系上的约束:


    类型 含义
    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,
    ...);
    

    以上代码,

    • 当删除department元组操作违反参照完整性约束时,系统并不拒绝此操作,而是“级联”删除course关系中相应元组;
    • 当更新department元组操作违反参照完整性约束时,系统并不拒绝此操作,而是参照域(此处为dept_name)设为null;
    • 当插入department元组操作违反参照完整性约束时,系统并不拒绝此操作,而是参照域(此处为dept_name)设为预设值。

    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')));
    

    相关文章

      网友评论

        本文标题:SQL笔记--(4)--[完整性约束]

        本文链接:https://www.haomeiwen.com/subject/sfgjnttx.html