数据库原理与应用笔记(五):数据库完整性

简介: 数据库完整性

5.1实体完整性

5.1.1定义实体完整性

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

5.2参照完整性

5.2.1定义参照完整性

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

5.3用户定义的完整性

5.3.1属性上的约束条件

5.3.2元组上的约束条件

5.4完整性约束命名字句

5.5断言

5.6触发器

5.6.1定义触发器

5.6.2激活触发器

5.6.3删除触发器


5.1实体完整性

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

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


什么是正确性?

学生属性组{学号,性别}中的性别只能是男或者女,不能是不男不女,这就是正确性

什么是相容性?

学生属性组的学号在专业课程属性组{专业课程号,学号}也是表达的是学号,不会变成其他班级座号等信息,这就是相容性


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

1提供定义完整性约束条件的机制

完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件。SQL标准提供了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。


2提供完整性检查的方法

数据库管理系统中检查是否满足完整性约束条件的机制称为完整性检查


3进行违约处理

如果系统发现了用户违法了完整性约束条件,将会拒绝执行该操作**(NO ACTION)或级联(CASCADE)**执行其他操作


关系数据库管理系统使得完整性控制成为其核心支持的功能,从而能够为所有用户和应用提供一致的数据库完整性


5.1.1定义实体完整性

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


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

定义为列级约束条件

定义为表级约束条件

对多属性构成的码只有一种说明方法:

定义为表级约束条件

例如:定义为列级约束条件20200622104254969.png

定义为表级约束条件

20200622104339985.png

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

关系数据库管理系统将按照实体完整性规则(在笔记二中有介绍)自动进行进检查,包括:

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


5.2参照完整性

5.2.1定义参照完整性


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

例如20200622105813806.png

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

参照完整性是把两个表中相应元组联系起来,对被参照表和参照表进行增、删、改操作时可能破坏参照完整性,必须进行检查以保证两个表的相容性

例如

20200622110116950.png

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

(1)拒绝no action执行

不运行执行该操作

(2)级联cascade操作

删除或修改所有不一致的元组

(3)设置为空值

设置为空值需要考虑外码是否接受空值

例如在学生属性组中学号为主码,在专业课程属性组中学号为外码,能不能把学号设置为空值呢?答案是不可以,**为什么?**因为学号同样是专业课程属性组的主属性,没了学号,即表示没有这个学生或者这个学生没有选这个专业课,这是与学校设定不符合的


20200622110653370.png


5.3用户定义的完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求

5.3.1属性上的约束条件

1属性上约束条件的定义

在CAREATE TABLE中定义属性的同时,可以设置条件约束,包括:

①列值非空(NOT NULL)

20200622111016733.png

②列值唯一(UNIQUE)

2020062211103452.png

③检查列值是否满足一个条件表达式(CHECK)20200622111046652.png

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

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


5.3.2元组上的约束条件

1元组上约束条件的定义(和属性上约束类似,用CHECK)20200622111337429.png

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

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


5.4完整性约束命名字句

SQL在CREATE TABLE语句中提供了完整性约束命名子句CONSTRAINT,用来对完整性约束条件命名


1完整性约束命名子句

CONSTRAINT<完整性约束条件名><完整性约束条件>

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

例如20200622111721613.png

2修改表中的完整性限制

可以用ALTER TABLE语句修改

例如20200622111839120.png

5.5断言

在SQL中可以使用数据定义语言中的CREATE ASSERTION语句,通过声明性断言来指定更具一般性的约束。断言创建后,任何对断言中所涉及的关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行


1创建断言的语句格式
CREATE ASSERTION<断言名>

20200622112533680.png

2删除断言的语句格式
DROP ASSERTION<断言名>

5.6触发器

触发器trigger是用户定义在关系表上的一类由事件驱动的特殊过程

激发触发器后触发器会保存在服务器中,任何用户的增删改操作都会激活相应的触发器。

5.6.1定义触发器

触发器又叫做事件-条件-动作(event-condition-action)规则

SQL使用CREATE TRIGGER来建立触发器,其语法格式一般为20200622112950983.png

下列是有关部分语法的详细说明(什么是什么,做什么的)

20200622113110978.png20200622113123388.png

20200622113134987.png

2020062211315213.png

例子如下20200622113217791.png

5.6.2激活触发器

触发器的执行是由触发事件激活,并由数据库服务器自动执行的。在触发器激活时遵循如下的执行顺序:

①执行该表上的BEFORE触发器
②激活触发器上的SQL语句
③执行该表上的AFTER触发器

激活before触发器还是比较抽象的,笔者在这里对学习笔记进行理解性的补充。因为创建了触发器后这个触发器就存在服务器里,所以当进行增删改等操作之前时,会自动激活触发器。**之前时不就没操作吗,它怎么触发?**请注意,触发事件是insert/delete/update,可以这样理解,你在修改某个东西之后,还没执行操作(比如计算机的一个属性窗口,你输入数据之后,你要点击应用,它才会执行操作,也就是你输入数据还没有点击应用的时候),它就会触发了


5.6.3删除触发器

删除触发器的SQL语法如下:
DROP TRIGGER<触发器名>ON<表名>

触发器必须是一个已经创建的触发器,并且只能由具有相应权限的用户删除


笔记使用教材:《数据库系统概论》 王珊 萨师煊 编著
视频课:中国大学MOOC 中国人民大学 数据库系统概论


























相关文章
|
2天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
96 64
|
10天前
|
SQL NoSQL 数据库
Cassandra数据库与Cql实战笔记
Cassandra数据库与Cql实战笔记
11 1
Cassandra数据库与Cql实战笔记
|
14天前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
38 5
Mysql(3)—数据库相关概念及工作原理
|
2天前
|
供应链 数据库
数据库事务安全性控制有什么应用场景吗
【10月更文挑战第15天】数据库事务安全性控制有什么应用场景吗
|
11天前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
15天前
|
关系型数据库 MySQL 数据库
MySQL数据库:基础概念、应用与最佳实践
一、引言随着互联网技术的快速发展,数据库管理系统在现代信息系统中扮演着核心角色。在众多数据库管理系统中,MySQL以其开源、稳定、可靠以及跨平台的特性受到了广泛的关注和应用。本文将详细介绍MySQL数据库的基本概念、特性、应用领域以及最佳实践,帮助读者更好地理解和应用MySQL数据库。二、MySQL
37 5
|
14天前
|
SQL 存储 Oracle
Oracle数据库SQL语句详解与应用指南
在数字化时代,数据库已成为各类企业和组织不可或缺的核心组件。Oracle数据库作为业界领先的数据库管理系统之一,广泛应用于各种业务场景。掌握Oracle数据库的SQL语句是数据库管理员、开发人员及运维人员的基本技能。本文将详细介绍Oracle数据库SQL语句的基本概念、语法、应用及最佳实践。一、Or
28 3
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
44 6
|
7天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
40 3
Mysql(4)—数据库索引
|
9天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
30 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用