第五章、数据库完整性

第五章、数据库完整性

介绍

1、数据库完整性介绍

1、数据库的完整性:随机数的正确性、相容性

2、数据的正确性:数据是否符合现实时间语义

3、数据的相容性:数据库同一对象在不同关系表中的数据是符合逻辑的

4、希望建立表的时候,就拥有数据的完整性

2、数据的完整性和安全性的概念

1、数据的完整性

1、防止数据库拥有不符合语义数据,防止数据库存储不正确的数据

2、防范对象:不符合语义、不正确的数据

2、数据的安全性

1、不会数据库被恶意破坏、非法存取

2、防范对象:非法用户和非法操作

3、数据库完整性应具备的功能

1、提高定义完整性约束条件机制

1、也叫完整性规则,数据库中的数据必须满足语义约束条件

2、提供完整性检查的方法

1、一般在INSERT、UPDATE、DELETE语句执行后进行检查

2、也可以在事务提交时检查

3、违约处理

1、采用拒绝(NO ACTION)执行该操作

2、或级连(CASCADE)执行其他操作等方式保证完整性(一个数据被修改,其他相关数据页和该数据关系相连对应)

3、DELETE语句的时候,数据库系统可能会给定NULL

5.1、实体完整性

5.1.1、实体完整性定义

1、关系模型的实体完整性

1、设置主码,用来数据区分

2、SQL语法:PRIMARY KEY

2、主码是单属性构成的有两种说明方法

1、定义为列级约束条件

2、定义表级约束条件(在一个表格中,对其中一列做主码)

3、主码是多属性的只能有一种说明方法

1、定义为表级约束条件

4、例子

1、例子1

image-20230906222853839

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

1、完整性内容检查

1、数据库系统按照规则,对数据进行自动检查

1、主要包括:

1、主码是否唯一,不唯一就错误或拒绝

2、主码的属性值,是否为空,有就直接拒绝或修改掉

2、检查主码值方法

1、方法

1、是进行全表扫描(遍历)

2、图解

image-20230906223509461

2、说明

1、全表扫描十分浪费资源

2、RDBMS会在主码上自动建立一个索引

5.2、参照完整性

5.2.1、参照完整性定义

1、定义

1、格式

FOREIGN KEY 定义
用REFERENCES短语知名这些外码是参照哪些表的主码

2、例子

image-20230906224427609

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

1、定义

1、一个参照完整性将两个表中的相应元组联系起来,对被参照表和参照表进行操作(增删改查)时会破坏参照完整性,所以需要检查

2、例子

image-20230906230427317

3、参照完整性违约处理规则

1、拒绝(NO ACTION)

1、不允许执行该操作,一般为默认

2、级联(CASCADE)

1、系统会把不一致的数据全部修改为一致的操作

3、空值(SET-NULL)

1、当造成不一致的时候,系统会把不一致的值设置为NULL

5、例子

image-20230906231133550

5.3、用户定义的完整性

1、针对某一具体应用数据,必须满足语义要求

2、由数据库系统提供了定义检验用户定义完整性的机制,不是程序承担

5.3.1、属性定义的约束条件

1、定义

1、列值非空(NOT NULL)、唯一(UNIQUE)、是否满足一个表达式(CHECK)

1、例子

image-20230906232025422

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

1、数据库系统进行检查,如果不满足则操作被拒绝执行

5.3.2、元组上的约束条件

1、 定义

1、在CREATE TABLE 中,可以使用CHECK短语,定义元组上的约束条件

2、可以设置在不同属性之间的取值相互约束条件

3、例子

image-20230906232448056

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

1、数据库系统进行检查,如果不满足则操作被拒绝执行

5.4、完整性约束命名子句

1、完整性约束命名子句

1、格式

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

1、其中完整性约束条件包括NOT NULL;UNIQUE;PRIMARY KEY;FOREIGN KEY;CHECK

2、例子

image-20230906232944411

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

1、格式

ALTER TABLE进行修改

2、例子

image-20230906233350403

5.5、域中的完整性限制

5.5.1、内容

1、域:一列数据的取值范围,相同数据类型的集合

5.5.2、语法

1、语法

CREATE DOMAIN语句

2、例子

1、例子

image-20230908095030044

2、例子

image-20230908095549282

5.6、断言

1、创建断言的语句格式

1、格式

CREATE ASSERTION <断言名><CHECK 子句>

2、check中的约束条件与where子句的条件表达式类似

2、例子

1、例子1

image-20230908100426772

2、例子2

image-20230908100430249

3、例子3

image-20230908100433888

4、例子4

image-20230908100437588

2、删除断言

1、格式

DROP ASSERTION <断言名>;

1、开销占资源较高,一般不建议用

5.7、触发器

1、介绍

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

2、说明

1、触发器保存在数据库服务器中

2、任何用户的增删改操作,由服务器自动激活触发器

3、触发器可以实施更为复杂的检查和操作,具有更精细和强大的数据控制能力

5.7.1、定义触发器

1、触发器又叫事件-条件-动作

1、格式

CREATE TRIGGER <触发器名称>
{BEFORE |AFTER} <触发事件> ON <表名>
REFERENCING NEW | OLD ROW AS <变量>
FROM EACH {ROW | STATEMENT}
[WHEN <触发条件>] <触发动作提>

2、定义触发器的语法说明

1、必须是表的拥有者
2、触发器名

1、触发器可以包含模式名,也可以不包含

2、在同一模式下触发器必须唯一

3、表名

1、触发器只能定义在基本表上,不能定义在视图

2、如果基本表发生变化,则对应的触发器也会被激活

4、事件触发

1、insert/delete/update这几个事件组合

2、update of<触发列,…>,即进一步知明修改哪些列时机会触发器

3、AFTER:事件完成后才激活触发器

4、BEFORE:时间触发前,激活触发器

5、触发器类型

1、行级触发器(FOR EACH ROW)

2、语句级触发器(FOR EACH STATEMENT)

3、例子

image-20230908102712104

6、触发条件

1、触发体动作为真时,触发动作体才执行,否则触发动作体不执行

2、如果没有WHEN触发条件,则触发体动作在触发器激活后立即执行

7、触发动作体

1、可以是匿名PL/SQL过程块,也可以是对自己创建存储过程的调整

2、如果是行级触发器,用户都可以在过程体中使用new 和old引用事件之后的新值和事件之前的旧值

3、如果语句触发器,则不能在触发动作提化总使用new和old

4、如果触发器动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响其他对象不发生任何变化

5、注意:不同的RDBMS产品触发器语法各部相同

6、例子1

7、例子2

5.7.2、激活触发器

1、一个数据可能有多个触发器,触发遵循以下顺序

1、执行该表上的BEFORE触发器

2、激活触发器的SQL雨具

3、执行该表上的AFTER触发器

5.7.3、删除触发器

1、语法格式

1、格式

DROP TRIGGER <触发器名> ON <表名>

2、必须有,才能删除

5.8、小结

1、完整性是我了保证数据库存储的数据是正确的;最重要的是实体完整性和参照完整性

2、完整性定义一般有SQL的数据定义语言完成,现在提供了完整性的定义和检查

3、违背完整性约束条件时RDBMS采取默认动作

4、触发器是保证数据完整性的重要方法,一般不使用,大多数使用在大型的数据库项目中

第六章、关系数据理论

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇