数据库完整性之参照完整性
完整性约束
- 关系模型的参照完整性
- 参照完整性定义
- 参照完整性检查
- 参照完整性违约处理
- 使用navicat设置字段外键/参照完整性约束
关系模型的参照完整性
数据表字段的外键约束属于数据库设计—— 关系模型的参照完整性 的内容。
关系模型的参照完整性是指:在创建表create table的SQL语句中,用foreign key短语定义哪些列/字段作为当前数据表的外键,用references短语指明这些外键参照哪些表的主码。
参照完整性定义
关系模型的参照完整性使用场景举例如下: 假定现在有学生表student(主键:sno)、选课表sc(主键sno、cno)、课程表course(主键:cno),那么:sc选课表的主键(sno,cno)的取值就需要参考学生表student的主键sno和课程表course的主键cno。
那么,在创建sc表时,其SQL语句如下:
CREATE TABLE sc(sno CHAR(11)) NOT NULL,(cno CHAR(10)) NOT NULL,grade SMALLINT,#指定主键PRIMARY KEY(sno,cno),//定义参照完整性FOREIGN KEY (sno) REFERENCES student(sno),FOREIGN KEY (cno) REFERENCES course(cno)
参照完整性检查
通过为sc表定义参照完整性,那么,sc表的主键(sno,cno)取值,就和student学生表的主键sno、course课程表的主键cno联系起来了。
那么,合理的情况应当是:对被参照表(student或者course)、参照表(sc)执行增加、删除、修改操作时,有可能会破坏这种参照完整性规则。
例如:当某个学生A转校或是退学,他在student表中的记录信息会被抹除,sno字段值当然也不会再存在,那么,sc选课表的主键(sno,cno)对于学生A这条记录的sno字段值无从参考,就出现了违反参照完整性的情况。因此,必须对参照完整性进行检查,以保证两个表的相容性。
参照完整性违约处理
当出现上图中给出的违背参照完整性规则的情况时,数据库管理系统就需要根据不同的策略执行相应的处理。一般有如下几种规则:
前提:现有数据表A、B,数据表A的creator字段参考了数据表B的admin字段(或者说:在创建数据表A时,指定数据表B的admin字段作为外键,与A表的creator相关联),暂时称表B为父表、表A为子表。以下策略都是在描述:当父表执行某项操作时,DBMS需要对A表执行的操作。
(1)拒绝(NO ACTION)操作 不允许该操作进行,这也是默认处理策略。
(2)级联(CASCADE)操作
当删除/修改父表B中的某一条记录,导致子表A的某一条或者几条记录不一致时,同时删除/修改子表A中所有不一致的若干条记录。
(3)设置为空值(SET NULL)
当删除/修改父表B中的某一条记录,导致子表A的某一条或者几条记录不一致时,就将子表A中所有不一致的若干条记录中的creator字段设置为空-null。
例如:给定规则-
①当删除表student中的记录时,级联删除sc表中的记录;
②当删除表course中的记录,并将导致SC表中的记录不一致时,拒绝执行此次删除操作;
③当更新表student、course中的记录时,级联更新sc表中的记录。
则SQL语句如下,
CREATE TABLE sc(sno CHAR(11)) NOT NULL,(cno CHAR(10)) NOT NULL,grade SMALLINT,#指定主键PRIMARY KEY(sno,cno),//定义参照完整性FOREIGN KEY (sno) REFERENCES student(sno)#当删除表student中的记录时,级联删除sc表中的记录ON DELETE CASCADE#当更新表student中的记录时,级联更新sc表中的记录ON UPDATE CASCADE, FOREIGN KEY (cno) REFERENCES course(cno)#当删除表course中的记录,并将导致SC表中的记录不一致时,拒绝执行此次删除操作ON DELETE NO ACTION#当更新表course中的记录时,级联更新sc表中的记录ON UPDATE CASCADE
使用navicat设置字段外键/参照完整性约束
使用navicat设置字段外键/参照完整性约束也是在创建数据表的时候指定的,只需将创建数据表的选项卡切换至“外键”,按照上述原理进行指定即可。当然,具体如何指定,还需要根据具体的应用场景来确定。
数据库完整性之参照完整性相关推荐
- MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)
数据完整性的概念 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 实体(行)完整性 实体完整性中的实体指的是表中的行,因为 ...
- 数据库完整性(实体完整性,参照完整性,用户定义完整性)
数据库完整性: 指数据库中数据的正确性.相容性 正确性:保证进入数据库的数据是符合语义约束的合法数据 相容性:同一个事实的两个数据应当是一致的 为了维护数据库的定义完整性: DBMS必须具备三个 ...
- mysql实体完整性实现方法_MySQL数据库——数据完整性(实体完整性、域完整性、参照完整性)...
数据完整性的概念 数据完整性是为了保证插入到数据库中的数据是正确的,防止用户可能的错误输入. 数据完整性分为实体完整性.域完整性.参照完整性. 实体(行)完整性 实体完整性中的实体指的是表中的行,因为 ...
- 数据库完整性(实体完整性、参照完整性、用户定义的完整性、完整性约束命名字句、断言、触发器)
数据库完整性:数据的正确性(是指数据是符合现实世界语义,反映了当前实际状况的).数据的相容性(是指数据库同一对象在不同关系表中的数据是符合逻辑的) 数据的完整性 : 防止数据库中存在不符合语义的数据, ...
- 【数据库系统设计】数据库完整性(实体完整性、参照完整性、用户定义的完整性、CHECK语句)
数据库完整性 5.1 实体完整性 5.1.1 实体完整性定义 5.1.2 实体完整性检查和违约处理 5.2 参照完整性 5.2.1 参照完整性定义 5.2.2 参照完整性检查和违约处理 小结 5.3 ...
- 『数据库』这篇数据库的文章真没人看--数据库完整性
『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 实体完整性 参照完整性 用户定义的完整性 完整性约束命名子句 域中的完整性限制 触发器 激活触发器 删除触发器 小结 ...
- 重温《数据库系统概论》【第一篇 基础篇】【第5章 数据库完整性】
本篇内容为中国人民大学教授王珊.萨师煊的<数据库系统概论>自学课程的复习笔记,学习视频源于小破站(传送门),对应视频P32-P36,属教材"[第一篇 基础篇]"的&qu ...
- 第12章 数据库完整性
一.数据库完整性概念 数据库完整性防止合法用户使用数据库时向数据库加入不符合语义的数据.防止错误的数据进入数据库. 完整性规则 触发条件 约束条件 违约响应 二.完整性约束分类 按约束的粒度 表级约束 ...
- SQL关于数据库完整性
SQL语句关于数据库完整性 数据的正确性和相容性 5.1实体完整性 5.1.1 定义实体完整性 例5.1 将Student表中的Sno属性定义为码. CREATE TABLE Student (Sno ...
最新文章
- ubuntu安装软件依赖
- 数字三角形:顺推法(一维数组)
- URI结构和ABNF操作符
- 【线上分享】WebRTC传输与服务质量
- h3c交换机 查看二层交换机端口ip_【分享】项目中如何选到称心如意的交换机?...
- 手把手教用XNA开发winphone7游戏(三)
- SQL注入:4、数据库可写
- makefile之通配符(4)
- fastjson 判断value是对象还是数组
- create-react-app中使用装饰器(@)写法
- 继续发布分页类的BLL层和Interface层部分哈
- 目标检测之Mtcnn网络详解(人脸检测)
- 微信小程序css篇----flex模型
- 有关SQL Server 2008你一定要知道的八件事 之三
- bilstmcrf词性标注_BiLSTM+CRF 的实现详解
- Unity 连接MySql数据库
- 第八章 (一)分治 练习题
- 模拟集成电路设计基础知识(一):MOS管结构及其I/V特性
- 逃离塔科夫机器码解除,实战解决【100%成功方法】
- 如何成为一个游戏制作人——第5.5章一个小游戏的框架
热门文章
- 浏览器获取mac地址_真香浏览器,时隔2个月终于又更新了!!!
- 【Java开发者专场】阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促...
- 桌面计算机硬盘打不开怎么办,电脑硬盘打不开提示格式化怎么办
- Web应用多账号系统设计及微信扫码登录实现
- float类型为什么有6位有效数字
- linux ss的使用方法
- 基于结构光扫描的生物芯片快速彩色质量监管
- Beyond Compare 4访问手机或媒体播放器上的文件
- 2021-10-19 学习笔记 什么是 JK 触发器?
- Java1.7版本解码base64_JDK Base64 编解码 1.7 和 1.8 的坑