第七章 数据库的完整性
lix_uan 91 3

正确性

  • 符合现实世界的描述

    相容性

  • 同一对象在不同表里面是符合逻辑的,比如我的地址、年龄 在两个表里面都应一致

    维护完整性

  • 提供定义完整性约束条件的机制
  • 提供完整性检查的方法
  • 进行违约处理

三大完整性

实体完整性

主码唯一,且非空

create table course (id int not null primary key,time varchar(255));

参照完整性

外码要么没有,要么只有一个

create table course (id int,time varchar(255),title varchar(255),teatcher_id int,primary key(id),foreign key(id) references course_description(course_id));

用户定义完整性

  • 非空
    create table student(no char(9) primary key, age int not null);
  • 列值唯一
    create table student(no char(9) primary key, age int unique);
  • 满足某一个条件表达式,check来写
    create table student(no char(9) primary key, sex char(2) check (sex in ('男','女')),age int not null);

触发器

  • 触发器也叫做 事件->条件->动作 规则
  • 当对一个表增删改的时候,对触发器里面的条件进行检查,如果成立,就执行触发器里面的动作,否则不执行
    create trigger <触发器名> {before|after} <触发事件> on <表名> referencing new|old row as <变量> for each {row|statment} [when <触发条件>] <触发动作体>;
    

create trigger SC_T after update of Grade on SC referencing oldrow as OldTuple,newrow as NewTuple for each row when(NewTuple.Grade>=1.1*OldTuple.Grade) insert into SC_U(Sno,Cno,OldTuple.Grade,NewTuple.Grade) values(OldTuple.Sno,OldTuple.Cno,OldTuple.Grade,NewTuple.Grade);

create trigger Student_Count after instert on Student referencing new table as delta for each statement insert into StuentInsertLog(Numbers) select count(*) from delta;

删除触发器: drop trigger <触发器名> on <表名>; ```

预览图
评论区

索引目录