5.数据库完整性
1.实体完整性(标注主码)
列级完整性:
sno char(9) primary key
表级完整性:
primary key(sno) //两个及以上使用
检查与违约
- 检查主码值是否唯一,不唯一则拒绝插入或修改
- 检查主码的各个属性是否为空,有一个为空就拒绝插入或修改
检查主码值是否唯一时,要进行全表扫描, 十分费时,所以数据库管理系统一般都在主码上自动建立一个索引(B+树),提高效率
2.参照完整性(标注外码)
表级完整性:
foreign key (外码) references 哪个表 (什么属性)
foreign key (sno) references table (sno)
检查与违约
修改参照表破坏完整性,拒绝执行修改被参照表破坏完整性,可以拒绝/级联删除/设为空值
被参照表(Student) | 参照表(SC) | 违约处理 |
---|---|---|
破坏参照完整性 | 插入元组 | 拒绝 |
破坏参照完整性 | 修改外码值 | 拒绝 |
删除元组 | 破坏参照完整性 | 拒绝/级联删除/设为空 |
修改主码值 | 破坏参照完整性 | 拒绝/级联删除/设为空 |
- SC中差一条元组,Student中没有这个属性值
- SC修改元组,Student中没有一样的
- Student删元组,SC表中某些元组找不到外码
- 修改主码,SC表某些元组找不到外码
on 操作 怎么办
no action 拒绝执行
cascade 级联删除
foreign key (Sno) references Stduent(Sno)
on delete cascade //Student删除操作时,级联删除SC表中涉及到的元组
on update cascade //Student更新操作时,级联更新SC表中涉及到的元组
foreign key (Cno) references Course (Cno)
on delete no action //Course删除操作时,如果造成Course与SC不一致,拒绝删除
on update cascade //级联更新
**
not null //列值非空
unique //列值唯一
check短语 //列值满足条件表达式 (允许使用谓词)
Sno char(10) not null
Sname char(10) unique
Ssex char(2) check(Ssex in('男','女'))