文章目录

  • 第五章 -- 数据库完整性
    • 5.1 实体完整性
      • 5.1.1 定义实体完整性
      • 5.1.2 实体完整性检查和违约处理
    • 5.2 参照完整性
      • 5.2.2 参照完整性检查和违约处理
    • 5.3 用户定义的完整性
      • 5.3.1 属性上的约束条件
        • 1.属性上约束条件的定义义返发
          • (1)不允许取空值
          • (2)列值唯一
          • (3)用CHECK短语指定列值应该满足的条件
        • 2.属性上约束条件的检查和违约处理
      • 5.3.2 元组上的约束条件
        • 1. 元组上约束条件的定义
        • 2. 元组上约束条件的检查和违约处理
    • 5.4 完整性约束命名子句
      • 1.完整性约束命名子句
      • 2.修改表中的完整性限制
    • 5.5 域中完整性限制

第五章 – 数据库完整性

数据库的完整性是指数据的正确性相容性

  • 数据的正确性是指数据是符合现实世界语义、反映当前实际状况的;
  • 数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的。

数据库的完整性与安全性的区别:

  • 数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
    完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。
  • 数据的安全性保护数据库防止恶意破坏和非法存取
    安全性控制的防范对象是非法用户和非法操作,防止他们对数据库数据的非法存取。

为维护数据库的完整性,数据库管理系统必须能够实现如下功能:

  1. 提供定义完整性约束条件的机制
    完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件
  2. 提供完整性检查的方法
  3. 进行违约处理

5.1 实体完整性

5.1.1 定义实体完整性

关系模型的实体完整性CREATE TABLE中用PRIMARY KEY定义

对单属性构成的码有两种说明方法:

  • 一种是定义为列级约束条件,

    CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY ,Sname CHAR(20) NOT NULL ,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20)
    );
    
  • 另一种是定义为表级约束条件(表级完整性定义在所有字段后面)。

    CREATE TABLE Student(Sno CHAR(9) ,Sname CHAR(20) NOT NULL ,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),PRIMARY KEY ( Sno )
    );
    

对多个属性构成的码只有一种说明方法,即定义为表级约束条件。

CREATE TABLE SC(Sno CHAR(9) NOT NULL ,Cno CHAR(4) NOT NULL ,Grade SMALLINT,PRIMARY KEY ( Sno, Cno )
);

5.1.2 实体完整性检查和违约处理

PRIMARY KEY 短语定义了关系的主码后,每当用户程序对基本表插入一条记录或对主码列进行更新操作时,关系数据库管理系统将按照实体完整性规则自动进行检查

包括:

  • (1)检查主码值是否唯一,如果不唯一则拒绝插入或修改。(主码唯一)
  • (2)检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改。(主码不能为空)

从而保证了实体完整性。

检查记录中主码值是否唯一的一种方法是进行全表扫描,全表扫描是十分耗时的,为了避免对基本表进行全表扫描,关系数据库管理系统一般都在主码上自动建立一个索引使用索引检查主码是否唯一

5.2 参照完整性

关系模型的参照完整性CREATE TABLE中用FOREIGN KEY 短语定义哪些列为外码,用REFERENCES 短语指明这些外码参照哪些表的主码

在表级定义参照完整性

CREATE TABLE SC(Sno CHAR(9) NOT NULL ,Cno CHAR(4) NOT NULL ,Grade SMALLINT,PRIMARY KEY ( Sno, Cno ),FOREIGN KEY ( Sno ) REFERENCES Student(Sno),FOREIGN KEY ( Cno ) REFERENCES Course( Cno )
);

5.2.2 参照完整性检查和违约处理

参照完整性将两个表中的相应元组联系起来了。

对被参照表和参照表进行增、删、改操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。


当上述的不一致发生时,系统可以采用以下策略加以处理:

  • (1)拒绝(NO ACTION)执行
    不允许该操作执行。该策略一般设置为默认策略。
  • (2)级联(CASCADE)操作
    当删除或修改被参照表的一个元组导致与参照表的不一致时,删除或修改参照表中的所有导致不一致的元组。
  • (3)设置为空值
    当删除或修改被参照表的一个元组时造成了不一致,则将参照表中的所有造成不一致的元组的对应属性设置为空值。

对于参照完整性,除了应该定义外码,还应定义外码列是否允许空值

[例5.4] 显式说明参照完整性的违约处理示例。

CREATE TABLE SC(Sno CHAR(9) NOT NULL ,Cno CHAR(4) NOT NULL ,Grade SMALLINT,PRIMARY KEY ( Sno, Cno ),FOREIGN KEY ( Sno ) REFERENCES Student(Sno)ON DELETE CASCADE # 删除Student中的元组时,级联删除SC中对应的元组ON UPDATE CASCADE, FOREIGN KEY ( Cno ) REFERENCES Course( Con )ON DELETE NO ACTION # 删除Course中的元组时,造成与SC表不一致,拒绝删除ON UPDATE CASCADE );

5.3 用户定义的完整性

5.3.1 属性上的约束条件

1.属性上约束条件的定义义返发

CREATE TABLE 中定义属性的同时,可以根据应用要求定义属性上的约束条件,即属性值限制,包括:

  • 列值非空(NOT NULL)。
  • 列值唯一(UNIQUE)。
  • 检查列值是否满足一个条件表达式(CHECK 短语)。
(1)不允许取空值

[例5.5] 在定义SC表时,说明Sno、Cno、Grade属性不允许取空值。

CREATE TABLE SC(Sno CHAR(9) NOT NULL ,Cno CHAR(4) NOT NULL ,Grade SMALLINT NOT NULL ,...
);
(2)列值唯一

[例5.6]建立部门表 DEPT,要求部门名称Dname列取值唯一,部门编号Deptno列为主码。

CREATE TABLE DEPT(Deptno NUMERIC(2),Dname CHAR(9) UNICODE NOT NULL ,Location CHAR(10),PRIMARY KEY (Deptno)
);
(3)用CHECK短语指定列值应该满足的条件

[例5.7] Student表的Ssex只允许取“男”或“女”。

CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY ,Sname CHAR(20) NOT NULL ,Ssex CHAR(2) CHECK ( Ssex IN ('男', '女') ),Sage SMALLINT,Sdept CHAR(20)
);

[例5.8] SC表的 Grade的值应该在0和100之间。

CREATE TABLE SC(Sno CHAR(9) NOT NULL ,Cno CHAR(4) NOT NULL ,Grade SMALLINT CHECK ( Grade>=0 AND Grade<=100 ),PRIMARY KEY ( Sno, Cno ),FOREIGN KEY ( Sno ) REFERENCES Student(Sno),FOREIGN KEY ( Cno ) REFERENCES Course( Con )
);

2.属性上约束条件的检查和违约处理

当往表中插入元组或修改属性的值时,关系数据库管理系统将检查属性上的约束条件是否被满足,如果不满足则操作被拒绝执行

5.3.2 元组上的约束条件

1. 元组上约束条件的定义

与属性上约束条件的定义类似,在 CREATE TABLE语句中可以用CHECK短语定义元组上的约束条件,即元组级的限制。

同属性值限制相比,元组级的限制可以设置不同属性之间的取值的相互约束条件

[例5.9] 当学生的性别是男时,其名字不能以Ms.打头。

CREATE TABLE Student(Sno CHAR(9) PRIMARY KEY ,Sname CHAR(20) NOT NULL ,Ssex CHAR(2),Sage SMALLINT,Sdept CHAR(20),# 能成插入的数据# 性别为女# 或性别为男,且姓名不为'Ms.'开头# 不为女,就为男CHECK ( Ssex = '女' OR Sname NOT LIKE 'Ms.')
);
  • 性别是女性的元组都能通过该项CHECK检查,因为Ssex='女’成立;
  • 当性别是男性时,要通过检查则名字一定不能以Ms.打头,因为Ssex='男’时,条件要想为真值,Sname NOTLIKE 'Ms.%'必须为真值。

2. 元组上约束条件的检查和违约处理

当往表中插入元组或修改属性的值时,关系数据库管理系统将检查元组上的约束条件是否被满足,如果不满足则操作被拒绝执行

5.4 完整性约束命名子句

SQL 还在 CREATETABLE 语句中提供了完整性约束命名子句 CONSTRAINT,用来对完整性约束条件命名,从而可以灵活地增加、删除一个完整性约束条件。

1.完整性约束命名子句

CONSTRAINT<完整性约束条件名><完整性约束条件>
  • <完整性约束条件>包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK短语等。

[例5.10] 建立学生登记表 Student,要求学号在90000~99999之间,姓名不能取空值,年龄小于30,性别只能是“男”或“女”。

CREATE TABLE Student(Sno NUMERIC(6),CONSTRAINT C0 CHECK (Sno BETWEEN 90000 AND 99999),Sname CHAR(20),
#     CONSTRAINT c2 not null 报错CONSTRAINT c2 CHECK ( Sname IS NOT NULL ),Ssex CHAR(2),CONSTRAINT C3 CHECK ( Ssex IN ('男', '女') ),Sage SMALLINT,CONSTRAINT C4 CHECK ( Sage < 30 ),Sdept CHAR(20),CONSTRAINT StudentKey PRIMARY KEY (Sno)
);

2.修改表中的完整性限制

可以使用ALTER TABLE 语句修改表中的完整性限制

[例5.12]去掉例5.10 Student表中对性别的限制。

ALTER TABLE mytest.Student
DROP CONSTRAINT c3;

[例5.13] 修改表Student 中的约束条件,要求学号改为在900 000~999 999之间,年龄由小于30改为小于40。

可以先删除原来的约束条件,再增加新的约束条件。

ALTER TABLE mytest.Student
DROP CONSTRAINT C0;
ALTER TABLE Student
ADD CONSTRAINT C0 CHECK ( Sno BETWEEN 900000 AND 999999);ALTER TABLE student
DROP CONSTRAINT C4;
ALTER TABLE student
ADD CONSTRAINT C4 CHECK ( Sage < 40 );

5.5 域中完整性限制

mysql不支持

数据库系统概论 ---- 第五章 -- 数据库完整性相关推荐

  1. 2022-1-9数据库理论期末复习(六)第五章 数据库完整性

    第五章 数据库完整性 数据库的 完整性 是指数据的 正确性 和 相容性. 数据库必须具有以下的功能 1)提供定义完整性 2)和完整性检查的机制 3)违约方法 1. 静态列级约束 静态列级约束:对的取值 ...

  2. 【梳理】数据库系统概论 第8章 数据库编程 8.1 嵌入式SQL 8.2 过程化SQL 8.3 存储过程和函数 8.4 ODBC编程

    教材:王珊 萨师煊 编著 数据库系统概论(第5版) 高等教育出版社 注:文档高清截图在后 第8章 数据库编程 标准SQL是非过程化的查询语言,操作统一.面向集合.功能丰富.使用简单.非过程化语言是相对 ...

  3. 【数据库系统】数据库系统概论====第十三章 数据库技术发展

    第十三章 数据库技术发展 文章目录 第十三章 数据库技术发展 13.1数据库技术发展概述 13.2数据库发展的3个阶段 13.2.1第一代数据库系统 13.2.2第二代数据库系统 13.2.3新一代数 ...

  4. 数据库系统概论:第五章 数据库完整性

    数据库的完整性指的就是数据的正确性和相容性.数据的正确性是指数据是符合世界语义.反映当前实际状况的:数据的相容性就是指数据库在同一对象在不同关系表中的数据是符合逻辑的. DBMS必须能够实现如下功能: ...

  5. 数据库系统概论---第五章:数据库完整性(实体、参照物、用户定义完整性 + constrain + domain + assert +tigger)

    与本文从头到尾相似的好文章:[2019-2020春学期]数据库作业13:SQL练习8 - CHECK / CONSTRAINT / TRIGGER / PROCEDURE/ FUNCTION 文章目录 ...

  6. 数据库系统概论 第七章 数据库设计(1)特点,概述,设计方法,规范设计方法,新奥尔良方法,用户和数据库管理员,模式,外模式,概念模式,逻辑模式,内模式,需求分析,数据项,数据流,数据存储,处理过程

    关注公众号凡花花的小窝,收获更多的考研计算机专业编程相关的资料 7.1数据库设计概述 广义的讲,是数据库及其应用系统的设计,即设计整个数据库应用系统 狭义的将,是设计数据库本身,即设计数据库的各级模式 ...

  7. 数据库系统概论(第五版 王珊 萨师煊 编著)

    数据库系统概论知识点总结 学习目录 基础篇 第一章 绪论 1.1 数据库系统概述 1.2 数据模型 1.3 数据库系统的结构 1.4 数据库系统的组成 1.5 小结 第二章 关系数据库 第三章 关系数 ...

  8. 数据库系统概论第五版(理论总结)

    第一章绪论 表述事物的符号称为数据.表述事物的符号可以是数字,也可以是文字.图形.图像.音频.视频等. 数据库是长期存储在计算机内.有组织的.可共享的大量数据的集合. 数据库系统是由数据库.数据库管理 ...

  9. 重温《数据库系统概论》【第一篇 基础篇】【第5章 数据库完整性】

    本篇内容为中国人民大学教授王珊.萨师煊的<数据库系统概论>自学课程的复习笔记,学习视频源于小破站(传送门),对应视频P32-P36,属教材"[第一篇 基础篇]"的&qu ...

最新文章

  1. Python Socket Programming
  2. linux 5.5安装万兆网卡驱动,RedHat 5.5系统下安装MW54U无线USB网卡驱动
  3. 【已解决】navigateTo:fail page “/pages/.../...“ is not found
  4. 求凸函数极值 CSF迭代法(雾)
  5. Android中将一个图片切割成多个图片[转]
  6. 逆水寒7月19服务器维护,逆水寒7月19日更新维护公告 更新内容汇总
  7. 2016.09.03【初中部 NOIP提高组 】模拟赛A总结
  8. 第十二章、LNMP架构(中)
  9. 君正X1500基于Minios的crash分析
  10. 深入解析Windows操作系统(Windows Internals) 4th Edition 读书笔记 - 序言
  11. 大数据技术原理与应用(一):大数据概述
  12. DIY LDAC蓝牙接收器(一)预备篇
  13. AI换脸正在发酵,有人抖音玩“蚂蚁呀嘿”,有人已经创业拿到300万美元融资...
  14. android配置wifi,详解Android通过修改配置文件设置wifi密码
  15. 从入门到精通我是这样学习算法的
  16. toArray()和toArray(Object a[ ]) 区别
  17. window中如何用命令行新建文件夹和文件
  18. nc网页版java插件下载_spring-nc
  19. 小程序和Web项目的区别
  20. node.js 读取json文件

热门文章

  1. “小姐你好,我是程序员。”——程序员幽默(不接触C语言你就看不懂了)
  2. ubuntu 网卡设置
  3. Diagnose Managed Memory Leaks
  4. 如何判断一个字节是否是一个汉字中的一部分
  5. melogin.cn主页登录_手机怎么进melogin.cn登陆页面
  6. 2022年海外社媒营销趋势分析-跨境知道
  7. C++中的opeartor new和placement new详解
  8. 修身养性必备——改变你一生的21个智慧【转载】
  9. git 怎么切换分支命令_git 项目切换分支 命令
  10. MVC和MVVM有什么区别