实体完整性
实体完整性:主码中的属性的值不能为空,不能重复 列级约束,表级约束这种约束一个表里只能出现一种,且只能出现一次 列级约束:定义单个属性为主码
create table Student
( Sno char(9) primary key, //列级约束
Sname char(20) not null,
Sage smallint
);
create table Student
( Sno char(9),
Sname char(20) not null,
Sage smallint,
primary key(Sno,Sname) //表级约束
);
违约处理
补充: 在主码上建立索引,是为了避免对基本表进行全表扫描(该方法用来检查记录中的主码值是否为空)
参照完整性
参照完整性:外码的值要么为空(如果允许)要么与被参照关系的主码相等 在定义外码时,还要定义外码列是否允许空值 表级约束:定义单个属性为外码
create table Student
( Sno char(9) not null,
Sname char(20) not null,
Sage smallint,
primary key(Sno,Sname)
//Sno是外码,参照表Student的主码Sno列
foreign key(Sno) references Student(Sno),
on delete cascade //级联删除
foreign key(Sname) references Student(Sname)
on update cascade //级联修改
);
违约处理
拒绝(NO ACTION)执行 不允许该操作执行(默认的) 级联(CASCADE)操作 当删除或修改被参照表的一个元组造成了与参照表的不一致,则删除或修改参照表中的所有造成不一致的元组 设置为空值(SET-NULL) 当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。
自定义完整性
- 属性上的约束
列值非空(not null) 列值唯一(unique) 检查列值是否满足一个条件表达式(check)
create table Student
( Sno char(9) unique, //唯一
Sname char(20) not null, //非空
Sage smallint check(Sage <100)
);
- 元组上的约束
create table Student
( Sno char(9),
Sname char(20) ,
Sex char(2),
Sage smallint ,
check (Sex=女 or Sname not like Ms.%)
);
违约处理
完整性约束命名与删除
命名:constraint c1 check(Sex in (‘男’,‘女’)) //将该约束命名为c1 删除: drop constraint c1 //删除约束c1 修改(先删后加): add constraint c1 check(Sex in (‘男’,‘女’))
断言(考试不考)
create assertion c1 check(Sex in (‘男’,‘女’)) //创建断言 drop assertion c1 //删除断言c1