第05章数据库完整性new
0005 数据库完整性

5.3 用户定义的完整性
用户定义的完整性
not null create table student ( sno char( 5 ), sname varchar( 20 ) not null, ssex char( 2 ), sage smallint, sdept varchar(15), constraint PK_student_sno primary key( sno ) )
参照完整性检查和违约处理
insert into t1 values(1) insert into t1 values(1) insert into t1 values(2) insert into t1 values(3) insert into t2 values(1) insert into t2 values(1) insert into t2 values(2) insert into t2 values(3) insert into t2 values(4) 拒绝
5.2 参照完整性
参照完整性
参照完整性规则 若属性 ( 或属性组 ) F是基本关系 的外 若属性(或属性组) 是基本关系 是基本关系R的外 码它与基本关系S的主码 相对应( 的主码K 码它与基本关系 的主码 s相对应( 基本 关系R和 可能是相同的关系 可能是相同的关系) 则对于R 关系 和S可能是相同的关系),则对于 中每个元组在F上的值必须为 上的值必须为: 中每个元组在 上的值必须为: 或者取空值 或者取空值 或者等于 中某个元组的主码值。 或者等于S中某个元组的主码值 或者等于 中某个元组的主码值。
实体完整性定义 创建表的时候用 创建表的时候用primary key定义 定义
示例:创建 示例:创建student表,将属性 定义为主码 表 将属性sno定义为主码 create table student ( sno char(5),constraint PK_stu_sno primary key, sname varchar(20) not null, ssex char(2), sage smallint, sdept varchar(20), ) onstraint PK_stu_sno primary key(sno) c
数据库原理--数据库完整性

数据库原理--数据库完整性数据库原理数据库完整性在当今数字化的时代,数据库成为了各类信息系统的核心组成部分。
无论是企业管理、电子商务,还是社交媒体等领域,都依赖于数据库来存储和管理海量的数据。
而在数据库的众多重要特性中,数据库完整性是确保数据质量、准确性和一致性的关键要素。
那什么是数据库完整性呢?简单来说,数据库完整性就是指数据库中的数据要符合预期的规则和约束条件,确保数据的准确性、完整性和一致性。
想象一下,如果一个数据库中的数据混乱无序、错误百出,那基于这些数据做出的决策岂不是要出大问题?数据库完整性可以分为实体完整性、参照完整性和用户定义的完整性这三大类。
实体完整性主要是确保表中的每一行数据都能够被唯一标识。
这就好比每个人都有一个独一无二的身份证号码,通过这个号码可以准确无误地识别出一个特定的人。
在数据库中,通常会为主键设置不为空且唯一的约束,来保证实体完整性。
比如在一个学生信息表中,学号就是主键,它不能为空白,也不能有重复的值,这样才能准确地标识每一个学生。
参照完整性则用于维护不同表之间数据的一致性。
就像一个班级的座位表和学生名单表,座位表中的学生名字必须在学生名单表中能找到对应的记录,不然就会出现“座位上坐着一个不存在的学生”这样的荒谬情况。
在数据库中,通过定义外键和相关的约束规则来实现参照完整性。
比如在订单表和商品表中,如果订单表中有商品的相关信息,那么这些商品在商品表中一定是存在的。
用户定义的完整性则更加灵活多样,它允许用户根据具体的业务需求来定义一些特殊的规则。
比如规定某个字段的值必须在特定的范围内,或者某些字段的组合必须满足特定的条件等。
假设在一个员工工资表中,可以规定工资值不能为负数,或者在一个成绩表中,规定成绩的取值范围在 0 到 100 之间。
为了确保数据库完整性,数据库管理系统提供了多种约束机制。
其中常见的有主键约束、外键约束、唯一约束、检查约束和默认值约束等。
主键约束就像前面提到的,确保主键列的值唯一且不为空。
数据库完整性

在student表上建立了了5个约束条件,包括主码约束
以及c1,c2,c3,c4四个列级约束。
2.修改表中的完整性限制
可以使用alter table语句修改表中的完整性约
束。
例:去掉student表中对性别的限制。 Alter table student drop constraint c4
5.6.1 定义触发器
SQL使用CREATE TRIGGER 命令建立触发
器,其一般格式为:
CREATE TRIGGER <触发器名> | BEFORE | AFTER | <触发器事件> ON <表名> FOR EACH {ROW | STATEMENT} [ WHEN <触发条件>] <触发动作体>
5.6.2 激活触发器
触发器的执行是由触发事件激活的,并
由数据库服务器自动执行的。 同一个表上的多个触发器激活的顺序为:
执行该表上的BEFORE触发器; 激活触发器的SQL语句; 执行该表上的AFTER触发器
5.6.3 删除触发器
DROP TRIGGER <触发器名>
ON <表名>;
例:定义一个BEFORE行级触发器,为教师表
TEACHER定义完整性规则“教授的工资不得 低于4000,如果低于4000元,自动改为4000 元”。
CREATE TRIGGER insert_or_update_sal BEFORE INSERT OR UPDATE ON teacher FOR EACH ROW AS BEGIN IF ( new.pJob=’教授’) and ( new.sal<4000) THEN New.sal:=4000; END IF; END;
05_数据库完整性

全表扫描.依次判断表中每条记录的主码值与 将插入记录上的主码值(或修改的新主码值) 是否相同.十分耗时. 在主码上自动建立索引(如B+树索引).可大 大提高效率.
5.2 参照完整性
5.2.1 参照完整性定义
在CREATE TABLE中用FOREIGN KEY短语来定 义哪些列为外码,用REFERENCES短语指明这 些外码参照哪些表的主码. 见课本P154 [例3]
定义触发器(续)
INSERT,UPDATE和DELETE三个选项是指定在表或视图 上执行哪些数据修改语句时将激活触发器的关键字.必须 至少指定一个选项.在触发器定义中允许使用以任意顺序 组合的这些关键字.如果指定的选项多于一个,需用逗号 分隔这些选项. AS后是触发器要执行的操作. CREATE TRIGGER 权限默认授予定义触发器的表所有者, sysadmin 固定服务器角色成员以及 db_owner 和 db_ddladmin 固定数据库角色成员,并且不可转让.
ALTER TABLE <表名> DROP < 完整性约束条件名>
5.6 触发器(Trigger)
触发器是用户定义在关系表上的一类由事件驱动的 特殊过程.一旦定义,任何用户对表的增,删,改 操作均由服务器自动激活相应的触发器,在DBMS 核心层进行集中的完整性控制.触发器类似于约束, 但是比约束更加灵活,可实施比FOREIGN KEY约 束,CHECK约束更为复杂的检查和操作,具有更 精细和更强大的数据控制能力.
定义触发器(续)
当你创建一个触发操作时,通常需说明所指的是触发语句 作用之前还是之后的列值.由于此种原因,我们用两个取 有特殊名字的虚拟表格来测试触发语句的作用:deleted 和inserted(在内存中,触发器完成运行后,这些表就不 能再访问). 这些表和指定触发器的表具有相同的结构. deleted表保 存受delete和update影响的行的副本.inserted表保存在 insert和update之后添加到触发器中的行的副本.
第5章数据库的完整性.ppt

实体完整性检查和违约处理(续)
另一个是索引
An Introduction to Database System
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义的完整性 5.4 完整性约束命名字句 *5.5 域中的完整性限制 5.6 触发器 5.7 小结
An Introduction to Database System
/* 如果在表级定义实体完整性,隐含了Sno,Cno不允许取空值, 则在列级不允许取空值的定义就不必写了 * /
);
An Introduction to Database System
属性上的约束条件的定义(续)
列值唯一
[例6] 建立部门表DEPT,要求部门名称Dname列取值唯 一,部门编号Deptno列为主码
对多个属性构成的码只有一种说明方法
定义为表级约束条件
An Introduction to Database System
实体完整性定义(续)
[例1] 将Student表中的Sno属性定义为码
(1)在列级定义主码
CREATE TABLE Student (Sno CHAR(9) PRIMARY KEY, Sname CHAR(20) NOT NULL, Ssex CHAR(2) , Sage SMALLINT, Sdept CHAR(20) );
);
An Introduction to Database System
5.2 参照完整性
5.2.1 参照完整性定义 5.2.2 参照完整性检查和违约处理
An Introduction to Database System
参照完整性检查和违约处理
数据库系统概论第五章数据库的完整性PPT课件

02 数据完整性的实现方式
实体完整性
实体完整性定义
确保表中每条记录的唯一性,通常通过主键约 束来实现。
主键约束
主键是表中的一个或多个字段的组合,其值唯 一标识表中的每条记录。
主键的作用
确保表中数据的唯一性,防止重复记录的出现。
数据库完整性技术面临的挑战和机遇
数据量爆炸式增长
01
随着大数据时代的来临,数据库完整性面临数据量爆炸式增长
带来的存储、处理和管理挑战。
法规遵从与隐私保护
02
随着法规对数据保护的要求日益严格,数据库完整性需满足法
规遵从和隐私保护的需求。
技术创新与市场机遇
03
数据库完整性技术的发展将带来新的市场机遇,推动相关产业
参照完整性定义
维护数据库表之间的关系,确保引用数据的 一致性和准确性。
级联更新和删除
当父表中的数据发生变化时,自动更新或删 除子表中的相关数据。
外键约束
通过在子表中设置外键来引用父表的主键, 确保子表中数据与父表数据的一致性。
更新和删除规则
定义当父表中的数据发生变化时,如何处理 子表中的相关数据。
视图完整性
THANKS FOR WATCHING
感谢您的观看
视图完整性定义
基于一个或多个表的查询结果 集创建视图,并确保该结果集
的完整性。
视图的作用
提供了一个虚拟表,可以基于 现有表的数据进行查询和操作 。
视图的限制
通过在视图上定义约束来确保 数据的完整性和准确性。
视图与数据操作
对视图进行查询、更新、插入 和删除操作时,必须遵守视图
数据库系统概论 第5章数据库完整性
完整性约束条件作用对象的状态: 完整性约束条件作用对象的状态 静态
动态
静态约束:是指数据库每一确定状态时的数据对象所应满 静态约束 是指数据库每一确定状态时的数据对象所应满 足的约束条件,它是反映数据库状态合理性的约束 足的约束条件 它是反映数据库状态合理性的约束. 它是反映数据库状态合理性的约束 动态约束:是指数据库从一种状态转变为另一种状态时 新 动态约束 是指数据库从一种状态转变为另一种状态时,新、 是指数据库从一种状态转变为另一种状态时 旧值之间所满足的约束条件,它是反映数据库状 旧值之间所满足的约束条件 它是反映数据库状 态变迁的约束. 态变迁的约束 完整性约束条件分类: 完整性约束条件分类 动态 静态 5 2 元组
16
例子: 例子: S(S#,SN,A#,SA) ( , , , ) A(A#,AN) ( , ) 关系中修改元组(95001,李勇 李勇,001,20)的A#改为 改为030? 在S关系中修改元组 关系中修改元组 李勇 的 改为 ? 两种策略: 两种策略 (1)受限修改 受限修改 (2)递归修改 递归修改
D(Data):指约束作用的数据对象 指约束作用的数据对象 O(Operation):触发完整性检查的数据库操作 触发完整性检查的数据库操作 A(Assertion):数据对象必须满足的断言或语义约束 数据对象必须满足的断言或语义约束 C(Condition):选择 作用的数据对象值的谓词 选择A作用的数据对象值的谓词 选择 P(Procedure):违反完整性规则时触发的过程 违反完整性规则时触发的过程
第5章 数据库完整性 章
5.1完整性约束条件 完整性约束条件 5.2完整性控制 完整性控制
1
数据库的完整性
正确性 相容性
数据库完整性的实现: 数据库完整性的实现 (1)定义完整性约束条件 定义完整性约束条件 (2)完整性检查 完整性检查 (3)违约反应 违约反应
第5章数据库完整性约束总结
第5章数据库完整性约束总结数据库完整性约束是指对数据库中数据的完整性进行约束和验证,从而保证数据的准确性和一致性。
在数据库设计和管理中,完整性约束是非常重要的一部分。
本文将总结数据库完整性约束的相关内容。
一、数据库完整性约束的概念数据库完整性是指对数据库中存储的数据进行约束,以保证数据的正确性和一致性。
完整性约束是通过规定一系列的规则和条件来限制数据的输入和修改,以保证数据的完整性。
常见的完整性约束有实体完整性、域完整性、参照完整性、用户定义完整性等。
1.实体完整性:是指每个表中的记录都有唯一的标识符,不允许重复记录的存在。
实体完整性可以通过设置主键来实现,主键是唯一标识一条记录的字段或字段组合。
2.域完整性:是指数据库中每个字段的取值必须满足指定的规则和约束。
数据类型、长度、有效性等都是域完整性的一部分。
3.参照完整性:是指在关系数据库中建立表之间的关系时,要求所有的外键引用必须是有效的,即引用的主键值必须存在。
参照完整性可以防止无效的外键引用和数据的不一致。
4.用户定义完整性:是指用户可以根据自己的需求定义一些完整性约束,例如检查一些字段值的范围、格式等。
二、实现数据库完整性约束的方法在数据库中,可以通过以下方法来实现完整性约束。
1.主键约束:主键是唯一标识一个实体的字段或字段组合,可以通过设置主键来实现实体完整性。
主键约束要求主键的值不能重复,可以通过唯一索引或者唯一约束来实现。
2.唯一约束:唯一约束是指一个字段的值不能重复,可通过唯一索引或者唯一约束来实现。
3.非空约束:非空约束是指一个字段的值不能为空,可以通过设置字段的默认值或者非空约束来实现。
4.外键约束:外键是指一个表中的字段引用了另一个表的主键,可以通过外键约束来实现参照完整性。
外键约束要求外键引用的主键值必须存在,可以通过设置级联删除或者设置为空来处理引用的主键删除或修改的情况。
5.检查约束:检查约束是指限制字段值的取值范围,可以通过设置字段的数据类型和长度来实现。
数据库完整性PPT演示课件
5.1实体完整性
• 5.1.1实体完整性定义
– PRIMARY KEY定义,表级完整性约束或列级完 整性约束
• 5.1.2实体完整性检查和违约处理
每当用户程序对基本表插入一条记录或者对主码列进行 更新操作时,按照实体完整性规则,系统将进行检查: • 主码值是否唯一,如果不唯一则拒绝插入或修改 • 主码各属性是否为空,只要有一个为空就拒绝插入或修改
5.2.2 参照完整性检查和违约处理
• 当上述的不一致发生时,系统可以采用以下的策略: 1 拒绝(No Action)执行
不允许该操作执行。该策略一般设置为默认策略。
2 级联(Cascade)操作 当删除或修改被参照表(Байду номын сангаасtudent)的一个元组造成
了与参照表(SC)的不一致,则删除或修改参照表中的 所有造成不一致的元组。
– CHECK短语(同属性值限制相比,元组级的限制可以 设置不同属性之间的取值的相互约束条件)
• 5.3.4元组上的约束条件检查和违约处理 当往表中插入元组或修改属性的值时,检查属性上的约
束是否被满足,如果不满足则操作被拒绝执行。
5.3用户定义的完整性
5.3用户定义的完整性
5.6触发器
触发器的基础知识
序的性能。
触发器定义之后,其名称存储于sysobjects表中, 定义语句存储在syscomments表中。
定义触发器的Transact-SQL语句中不能出现以下 语句,否则SQL Server将拒绝编译、存储这些语句相 关的触发器。
· 所有的CREATE命令 · 所有的DROP命令 · ALTER TABLE和ALTER DATABASE命令 · TRUNCATE TABLE命令(删除表中所有行) · GRANT和REVOKE命令 · UPDATE STATISTICS命令 · SELECT INTO命令等。(创建表将结果集填充)
实验5-数据库的完整性
实验实现数据完整性一、实验目的(1)实现数据完整性的概念及实施数据完整性的重要性。
(2)掌握数据完整性的分类。
(3)掌握完整性约束的添加、删除方法。
(4)掌握通用默认值的创建、实施与删除方法。
(5)掌握规则的创建、实施与删除方法。
(6)掌握级联删除、级联修改方法。
二、实验内容1、完整性约束的添加、删除(1)通过SQL Server Management Studio实施约束a.为表Student的Birth字段创建检查约束,使输入的生日日期小于系统日期。
①、选择Student表,右击→设计,打开Student表②、选择Birth一行,右击→CHECK约束,打开界面如下图所示③、单击“添加”④、在表达式中写入:Entrance_date<getdate()⑤、单击“关闭”退出b.为表Student的Sdept字段,设置默认值约束,默认值取’计算机系’。
选择Sdept一行,在其列属性中修改其默认值c.为Student表的Sname字段添加唯一性约束。
选择Sname一行,右击→索引/键出现如下界面:单击“添加”,在类型中选择“唯一键”,在列中选择“Sname”,名称自定义最后单击“关闭”退出d.将SC表的Sno,cno字段设置外键约束,约束名自已取,并允许级联删除与级联更新。
(此要求在SQL Server2008R2中无法做出)若已存在外键约束,请先删除。
①、选中Sno,右击→单击“关系”,出现如下信息,可见已存在外键约束选中键,点击删除,完成约束删除②、添加约束:选中Sno,右击,选择“关系”,出现如下信息,③、点击添加,并修改④、修改成自己想要的规范和名称⑤、确定,完成⑥、设置Cno的外键同上理(2)使用Transact-SQL语句实施约束a.为Student表的Sno字段添加一个check约束,使学号满足如下条件:学号前四位为2011,学号后四位为数字字符。
alter table Studentadd constraint sno_numcheck(sno like '[2][0][1][1][0-9][0-9][0-9][0-9]')b.为Student表中的Birth字段添加一个约束,规定生日应小于入学时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
5.1 实体完整性
1.实体完整性定义 在CREATE TABLE语句中用PRIMARY KEY定义
码由单字段构成: 定义可以为列级或表级约束;
码由多字段构成: 定义只能为表级约束;
第05章数据库完整性new
5
5.1 实体完整性
[例1]在数据库中,定义Student表的Sno属性为主码。
定义在列级约束:
数据库系统概论
An Introduction to Database System
第五章 数据库完整性
第05章数据库完整性new
1
第五章 数据库完整性
什么是数据库的完整性?
数据的正确性和相容性
防止不合语义的、不正确的数据进入数据库。 完例整:学性生:的保年证龄数必据须库是能整否数真,实取地值反在映现6-实50世间界;.
使用CREATE TABLE语句在定义属性的同时,定义 对属性值的限制。
6
5.1 实体完整性
[例2]在SC表中定义(Sno,Cno)为主码。
CREATE TABLE SC ( Sno CHAR(5), Cno CHAR(2), Grade SMALLINT, PRIMARY KEY (Sno, Cno) );
第05章数据库完整性new
7
5.1 实体完整性
2.实体完整性检查和违约处理
FOREIGN KEY (Cno) REFERENCES course(Cno)
ON DELETE CASCADE
);
第05章数据库完整性new
13
5.2 参照完整性
[例3]在SC表中的参照完整性。 ALTER TABLE SC ADD FOREIGN KEY (SNO) REFERENCES STUDENT(SNO)
CREATE TABLE Student
(Sno CHAR(8) , PRIMARY KEY, Sname CHAR(8), Sage INT);
定义在表级约束:
CREATE TABLE Student
(Sno CHAR(8),
Sname CHAR(8),
Sage INT,
)P;RIMARY KEY(Sno)第)0;5章数据库完整性new
第05章数据库完整性new
16
5.2 参照完整性
例:要删除Student关系中Sno=950001的元组,而SC 关系中有4个元组的Sno都等于950001。
√ 级联删除:
将SC关系中所有4个Sno=950001的元组一起删
除。依此类推可以继续级联下去。
√ 受限删除:
系统将拒绝执行此删除操作。
51 54 65 68 69 71 76
第05章数据库完整性new
10
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义完整性 5.4 完整性约束命名子句 5.5 触发器
第05章数据库完整性new
11
5.2 参照完整性
1.参照完整性定义 在CREATE TABLE语句中: 用 FOREIGN KEY 短语定义哪些列为外码; 用 REFERENCES 短语指明这些外码参照哪个表 的主码。
拒绝执行(默认策略)
级联操作(CASCADE)
当删除或修改被参照表的一个元组造成与 参照表不一致时,则删除或修改参照表中所有 不一致的元组。
设置为空(SET-NULL)
当删除或修改被参照表的一个元组造成与 参照定表义不参一照致完时整,性则时将,参除照了表定中义所外有码造,成还不应一 定致义的外元码组是对否应允属许性为置空空。。
第05章数据库完整性new
12
5.2 参照完整性
[例3]在SC表中的参照完整性。
CREATE TABLE SC
(Sno CHAR(8) NOT NULL,
Cno CHAR(3) NOT NULL,
Grade SMALLINT,
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES student(Sno),
第05章数据库完整性new
14
5.2 参照完整性
2. 参照完整性检查和违约处理 对被参照表和参照表进行增、删、改操作
时进行检查
有四种情况可能破坏参照完整性:
参照表中 插入一个新元组; 修改外码值;
被参照表中
删除一个元组;
修改主码值。
第05章数据库完整性new
15
5.2 参照完整性
当参照完整性不一致时,系统采取以下策略:
第05章数据库完整性new
9
5.1 实体完整性
key F1
F2
F3
3
…
…
…
25
…
…
…
20
…
…
…
15
…
…
…
93
…
…
…
79
…
…
…
65
…
…
…
84
…
…
…
71
…
…
…
51
…
…
…
7
…
…
…
30
…
…
…
41
…
…
…
54
…
…
…
65
…
…
…
69……源自…68……
…
25
51
12 30
66 78
3 7 15 20 25 30 41
79 84 93
学生的性别只能是男或女;
区别学数生的据学完号整一性定和是安唯全一的性;的两个概念。
学生所在的系必须是学校已有的系;
第05章数据库完整性new
2
第五章 数据库完整性
为保证完整性,DBMS必须做到:
1.完整性约束条件定义机制 完整性约束条件是数据模型的组成部分,
约束数据库中数据的语义。
2.完整性检查机制
检查用户发出的操作请求是否违背了完整 性约束条件。
3.违约反应 如果操作请求使数据违背了完整性约束条件,
则采取一定的动作来保证数据的完整性。
第05章数据库完整性new
3
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义完整性 5.4 完整性约束命名子句 5.5 触发器
第05章数据库完整性new
× 置空值删除:
将SC关系中所有Sno=950001的元组Sno置空。
第05章数据库完整性new
17
第五章 数据库完整性
5.1 实体完整性 5.2 参照完整性 5.3 用户定义完整性 5.4 完整性约束命名子句 5.5 触发器
第05章数据库完整性new
18
5.3 用户定义的完整性
1.属性上约束条件的定义
(1)完整性检查 当用户进行插入记录或修改主码时,DBMS系统自
动检查: 检查主码值是否惟一; 检查每个主属性值是否为空。
(2)违约处理 拒绝插入或修改操作。
第05章数据库完整性new
8
5.1 实体完整性
2.实体完整性检查和违约处理 (3)检查主码是否惟一的方法 全表扫描 依次判断表中每一个记录的主码值与插入记 录的主码值是否一致。 缺点:效率低 利用主码的B+索引 优点:效率高