第五章 数据库完整性

合集下载

第5章sql数据库完整性约束

第5章sql数据库完整性约束
CHECK约束是限制用户输入某一列的数据取值,即该 列只能输入一定范围的数据。 CHECK约束可以作为表定义的一部分在创建表时创建, 也可以添加到现有表中。表和列可以包含多个CHECK约束。 允许修改或删除现有的CHECK约束。 在现有表中添加CHECK约束时,该约束可以仅作用于 新数据,也可以同时作用于已有的数据。默认设置为 CHECK约束同时作用于已有数据和新数据。当希望现有数 据维持不变,则使用约束仅作用于新数据选项。
5.2.4 默认值(DEFAULT)约束
默认约束是指在用户未提供某些列的数据时,数据库 系统为用户提供的默认值。从而简化应用程序代码和提高 系统性能。 表的每一列都可包含一个DEFAULT定义。可以修改或 删除现有的DEFAULT定义,但必须首先删除已有的 DEFAULT定义,然后通过新定义重新创建。 1.利用Management Studio定义(删除)default约束 步骤1:右键要建立default约束的表选择“修改”。 步骤2:在弹出的窗口中对应字段的“默认值或绑定”处 输入默认值。 步骤3:点击保存即可。
PRIMARY KEY约束在表中定义一个主键,唯一的标 识表中的行。一个表只能有一个PRIMARY KEY约束。
当向表中的现有列添加PRIMARY KEY约束时,SQL Server将检查列中现有的数据以确保现有数据遵从主键的 规则,即无空值、无重复值。 每个表都应有一个主键。主键可以是一列或列组合。
CREATE TABLE kc_new (5-4)
(课程号 CHAR(4) NOT NULL CONSTRAINT pk_kch1 PRIMARY KEY, 课程名 CHAR(16) NOT NULL CONSTRAINT ix_kcm1 UNIQUE,
学分 SMALLINT,

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

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

一、选择题1.实体完整性要求主属性不能取空值,这一点可通过( )来保证。

A .定义外部键B .定义主键C .用户定义的完整性D .由关系系统自动答案:B2. ( )定义了对参照关系的外部属性值域的约束。

A .实体完整性规则B .用户定义的完整性规则C .参照完整性规则D .以上均不是答案:C3.在如下2个数据库的表中,若雇员信息表EMP 的主键是雇员号,部门信息表DEPT 的主键是部门号。

若执行所列出的操作,哪个操作不能执行( )EMP DEPTA .从雇员信息表EMP 中删除行(’010’,’’王利,’01’,’1200’)B .在雇员信息表EMP 中插入行(’102’,’赵丽’,’01’,’1500’)C .将雇员信息表EMP 中雇员号=’010’的工资改为1600元D .将雇员信息表EMP 中雇员号=’101’的部门号改为’05’答案:D4.关系数据库中,实现主码标识元组的作用是通过( )A .实体完整性规则B .参照完整性规则C .用户自定义的完整性D .属性的值域答案:A5.在关系数据库中,实现“表中任意两行不能相同”的约束是靠( )A .外码B .主码C .属性D .列答案:B6.关系数据库中,实现表与表之间的联系是通过( )A .实体完整性规则B .参照完整性规则C .用户自定义的完整性D .值域答案:B雇员号 雇员名 部门号 工资001 张红 02 2000 010 王利 01 1200056 马明 02 1000101 赵丽 04 1500 部门号 部门名 主任 01 业务部 李林02 销售部 江平 03 服务部 周明 04 财务部 陈胜7.根据关系模式的完整性规则,一个关系中的“主键”()A.不能有两个B.不能成为另一个关系的外部键C.不允许为空D.可以取空值答案:C8.在关系模型中,实现“关系中不允许发现相同的元组”的约束是通过()A.候选键B.主键C.外键D.一般键答案:B二、填空题1.为了维护数据库中数据的完整性,在对关系数据库执行插入时首先应检查__________规则。

第5章 数据库完整性

第5章 数据库完整性

第5章数据库安全性(2课时)数据库的数据保护主要包括数据的安全性和数据的完整性。

数据的安全性是为了保护数据库防止恶意的破坏和非法访问,防范对象是非法用户和非法操作。

数据库的完整性是指数据的正确性和相容性,是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据,防范对象是不合语义的、不正确的数据。

举例说明数据的完整性(三种完整性各一例)。

为维护数据库的完整性,DBMS必须具备三个功能:1 提供定义完整性约束条件的机制完整性约束条件也称为完整性约束规则,是数据库必须满足的语义约束条件。

SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性。

这些完整性一般由SQL的DDL语句来实现。

它们作为数据库模式的一部分存入数据字典中。

2 提供完整性检查的方法DBMS中检查数据是否满足完整性约束条件的机制称为完整性检查。

一般在INSERT、UPDA TE、DELETE语句执行后开始检查,也可以在事务提交时检查。

检查这些操作执行后数据库中的数据库是否违背了完整性约束条件。

3 违约处理DBMS若发现用户的操作违背了完整性约束条件,就采取一定的动作,如拒绝(NOACTION)执行该操作,或级联(CASCADE)执行其他操作,进行违约处理以保证数据的完整性。

目前商用的DBMS产品都支持完整性控制,即完整性定义、检查控制和违约处理都是由DBMS来实现,不必由应用程序来完成,从而减轻了应用程序员的负担。

5.1 实体完整性是关系的两个不变性之一,关系的主属性的取值不能相同,主属性不能取空值,保证在一个关系中不存在两个完全相同的元组。

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

对单属性构成的码有两种说明方法:一种是定义为列级约束条件;一种是定义为表级约束条件。

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

第5章数据库完整性

第5章数据库完整性

4. 修改被参照关系中主码的问题
两种策略 不允许修改主码 允许修改主码 违约操作 要修改被参照关系中某些元组的主码值,而 修改被参照关系中某些元组的主码值 中某些元组的主码值, 参照关系中有些元组的外码值正好等于被参 照关系要修改的主码值,如修改Student学号; 照关系要修改的主码值,如修改 学号; 学号
受限插入:系统将拒绝向 关系插入 关系插入( 受限插入:系统将拒绝向SC关系插入(99001, , 1,90)元组. , )元组. 递归插入:系统将首先向 递归插入:系统将首先向Student关系插入 关系插入 Sno=99001的元组,然后向 关系插入 的元组, 的元组 然后向SC关系插入 (99001,1,90)元组. , , )元组.
级联修改 修改被参照关系中主码值同时, 修改被参照关系中主码值同时,用相同的方法修改 参照关系中相应的外码值; 参照关系中相应的外码值; 受限修改 拒绝此修改操作. 拒绝此修改操作.只当参照关系中没有任何元组的 外码值等于被参照关系中某个元组的主码值时, 外码值等于被参照关系中某个元组的主码值时,这 个元组的主码值才能被修改; 个元组的主码值才能被修改; 置空值修改 修改被参照关系中主码值, 修改被参照关系中主码值,同时将参照关系中相应 的外码值置为空值; 的外码值置为空值;
实体完整性
表中的Sno, Cno定义为码 例:将SC表中的 表中的 定义为码
CREATE TABLE SC ( Sno CHAR(7) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT, PRIMARY KEY (Sno, Cno), );
实体完整性
实体完整性检查和违约处理
3.在参照关系中插入元组时的问题 在参照关系中插入元组时的问题

数据库完整性

数据库完整性

在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;

第五章 数据库完整性

第五章 数据库完整性
7
例2:将SC表中的SNO、cno属性组定义为码 create table sc (sno char(9) not null, cno char(4) not null, grade smallint, primary key(sno,cno) )
8
5.1.2 实体完整性的违约处理

对于实体完整性的检查,包括:
在子表中修改外码(也是主属性)的策略


6. 在参照关系(子表)中修改外码(同时是主码 属性 )。与在参照关系中插入元组类似,可以 有2种策略: 受限修改 递归修改 RDBMS在实现参照完整性时: 需要向用户提供定义主码、外码的机制。 向用户提供按照自己的应用要求选择处理依 赖关系中对应的元组的方法。
6
5.1 实体完整性
5.1.1 定义实体完整性 例1:将student表中的sno属性定义为码 create table student (sno char(9) primary key, sname char(20) not null, ssex char(2), sage smallint, sdept char(20) )
26
5.4 完整性约束命名子句


1. 完整性约束命名子句 Constraint <完整性约束条件名><完整性约 束条件> 例5.10 建立学生登记表 student,要求学号在 90000—99999 之间,姓名不能取空值,年 龄小于30,性别只能是“男”或者“女”
5

数据库完整性控制机制


DBMS完整性控制机制: 1. 提供定义完整性约束条件的机制:提供定义数 据完整性约束条件的方法,完整性约束条件作为 模式的一部分存入数据库中; 2. 提供完整性检查的方法:进行完整性检查,检 查数据是否满足约束条件; 3. 进行违约处理:若有违反,采取相应措施(拒 绝、报告、改正)处理。 完整性子系统:DBMS中执行完整性控制的子系统。 其功能为监督事务的执行,测试其是否违反完整性 约束条件;若有违反,则分情况进行预定的处理。

05_数据库完整性

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之后添加到触发器中的行的副本.

数据库原理--数据库完整性

数据库原理--数据库完整性
Use stu Create table student(sno char(9) primary key,sname……) Create table course (cno char(4) primary key,sname……) Create table sc (sno char(9) foreign key references student(sno) on delete cascade on update cascade, cno char(4) foreign key references course(cno) on delete no action on update no action , Grade smallint )
4)用户自定义完整性
用户定义的完整性就是针对某一具体应用的数据必须满
足的语义要求;可直接由RDBMS提供,而不必由应用程 序承担;系统将实现数据完整性的要求直接定义在表上 或列上。 常见的实现机制包括:
规则(Rule)、创建数据表时的所有约束(Constraint)、触发
器(Trigger)、存储过程(Stored Produre);
[, ...n]
例1:定义数据表student时,为学号sno字段创建主键约束,对 姓名sname字段定义惟一值约束; 方法1:在列级定义主码 Use stu
CREATE TABLE student (Sno char(9) constraint sno_pk primary key,
Sname char(8) constraint sname_uk unique,
提供完整性检查的机制
• 检查数据是否满足完整性约束条件的机制;
违约处理
• 若用户操作违反完整性约束条件,采取一定的动作,如拒绝执 行(NO ACTION)、级联执行或其他操作;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Sname VARCHAR(20) NOT NULL, Sage SMALLINT,
Ssex CHAR(2));
西南交通大学 《数据库原理及应用》第五章 第17页
5.3.1 属性上的约束条件的定义
2、列值唯一 例2:建立部门表DEPT,要求部门名称Dname列取
值唯一,部门编号Deptno列为主码。
Foreign Key (Cno) References Course(Cno))
西南交通大学 《数据库原理及应用》第五章 第8页
5.2.2 参照完整性检查和违约处理 参照完整性中,对被参照表和参照表进行增删改操 作时有可能破坏参照完整性,必须进行检查。
表5.1 可能破坏参照完整性的情况及违约处理
例4 :建立教师表TEACHER,要求教师的应发工资不超过 3000元。应发工资就是实发工资列Sal与扣除项Deduct之和。
CREATE TABLE TEACHER
(Eno CHAR(4), Ename VARCHAR(10),
Sal NUMERIC(7,2), Deduct NUMERIC(7,2),
5.4 完整性约束命名子句
SQL还在CREATE TABLE语句中提供了完整性约束命
名子句CONSTRAINT,用来对完整性约束条件命名,可 以灵活地增加、删除一个完整性约束条件。
1、完整性约束命名子句
CONSTRAINT<完整性约束条件名> [PRIMARY KEY短语|FOREIGN KEY短语|CHECK短语]
例3: 建立学生登记表Student,要求学号在 90000至 99999之间,性别只能是‘男’或‘女’。 CREATE TABLE Student
(Sno CHAR(5) CHECK (Sno BETWEEN 90000 AND 99999), Sname VARCHAR(20),
Sage SMALLINT, Ssex CHAR(2) CHECK (Ssex IN ('男', '女')))
Foreign Key (Cno) References Course(Cno)
On Delete No Action On Update Cascade)
西南交通大学 《数据库原理及应用》第五章 第14页
5.3 用户定义的完整性
用户定义的完整性就是针对某一具体应用的数据必须
满足的语义要求。
目前的RDBMS都提供了定义和检验这类完整性
西南交通大学
《数据库原理及应用》第五章
第19页
5.3.2 属性上的约束条件检查和违约处理 当往表中插入元组或修改属性的值时,RDBMS就检
查属性上的约束条件是否被满足,如果不满足则操作 被拒绝执行。
西南交通大学
《数据库原理及应用》第五章
第20页
5.3.3 元组上的约束条件的定义
与属性上约束条件的定义类似,create table中可用CHECK短 语定义元组上的约束条件。同属性值限制相比,元组级的限 制可以设置不同属性之间的取值的相互约束条件。
CHECK (Sal + Deduct <=3000))
西南交通大学 《数据库原理及应用》第五章 第21页
5.3.4 元组上的约束条件检查和违约处理 当往表中插入元组或修改属性的值时,RDBMS就检查
元组上的约束条件是否被满足,如果不满足则操作被 拒绝执行。
西南交通大学
《数据库原理及应用》第五章
第22页
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 900000 AND 999999)
西南交通大学 《数据库原理及应用》第五章 第25页
作业
P164
2、4、6题
西南交通大学
《数据库原理及应用》第五章
第26页
例6: 去掉[例5]student表中对性别的限制。 ALTER TABLE Student DROP CONSTRAINT C4 例7:修改[例5]student表中的约束条件,要求学号改为在900 000-999 999之间。 可以先删除原来的约束条件,再增加新的约束条件。
ALTER TABLE Student DROP CONSTRAINT C1 ;
第五章 数据库完整性
学习要求 掌握数据库完整性概念与数据库安全性概念 之间的区别与联系 掌握DBMS完整性控制机制 掌握SQL定义关系模式的完整性约束条件
西南交通大学
《数据库原理及应用》第五章
第1页
第五章 数据库完整性
• 什么是数据库的完整性 –数据的正确性和相容性 –防止不合语义的数据进入数据库。
值与被参照关系中要删除元组的主码值相同时,系
统才执行删除操作,否则拒绝此删除操作。
置空值删除:在删除被参照关系中的元组时,将
参照关系中相应元组的外码值置空值。
西南交通大学 《数据库原理及应用》第五章 第11页
5.2.2 参照完整性检查和违约处理 在最后一种策略中,需要考虑外码能否接受空值问题 根据实际情况的不同,一个关系的外码有时可以
被参照表(例如Student) 参照表(例如SC) 可能破坏参照完整性 可能破坏参照完整性 删除元组 修改主码值 插入元组 修改外码值 违约处理 拒绝 拒绝
可能破坏参照完整性 拒绝/级连删除/设置为空值 可能破坏参照完整性 拒绝/级连删除/设置为空值
西南交通大学
《数据库原理及应用》第五章
第9页
5.2.2 参照完整性检查和违约处理 当上述不一致发生时,系统可采用以下策略加以处理:
5.1 实体完整性
• 关系模型的实体完整性在CREATE TABLE语句中
提供了PRIMARY KEY子句,供用户在建表时指 定关系的主码列。
在列级使用PRIMARY KEY子句 在表级使用PRIMARY KEY子句
西南交通大学
《数据库原理及应用》第五章
第4页
5.1.1 实体完整性定义 例1 定义Student表的Sno属性为主码。
例: 学生的年龄必须是整数,取值范围为14--29; 学生的性别只能是男或女; 学生的学号一定是唯一的;
学生所在的系必须是学校开设的系;
– 完整性:是否真实地反映现实世界
西南交通大学 《数据库原理及应用》第五章 第2页
第五章 数据库完整性
完整性控制机制
1.完整性约束条件定义机制
完整性约束条件:数据模型的组成部分,约束数据库 中数据的语义
Sname VARCHAR(20) NOT NULL,
Sage SMALLINT,
Ssex CHAR(2) CONSTRAINT C4 CHECK (Ssex IN('男','女')))
西南交通大学
《数据库原理及应用》第五章
第24页
5.4 完整性约束命名子句
2、修改表中的完整性限制
使用ALTER TABLE语句修改表中BER,
Dname VARCHAR(9) UNIQUE, Location VARCHAR(10), PRIMARY KEY (Deptno))
西南交通大学 《数据库原理及应用》第五章 第18页
5.3.1 属性上的约束条件的定义 3、用CHECK短语指定列值应该满足的条件
• FOREIGN KEY子句:定义外码列 • REFERENCES子句:外码参照哪个表的主码
Create Table SC ( Sno char(9) , Cno char(4) ,
Grade smallint , Primary Key (Sno,Cno),
Foreign Key (Sno) References Student(Sno),
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)
置空值删除:删除被参照关系专业中的主码值,同 时将参照关系学生中相应的外码值置为空值。
语义:某个专业删除了,该专业的所有学生专业未定, 等待重新分配专业。
西南交通大学 《数据库原理及应用》第五章 第13页
5.2 参照完整性 显式说明参照完整性的违约处理示例:
1、拒绝执行 不允许该操作执行。该策略一般设置为默认策略。
2、级连操作
删除或修改被参照表的一个元组造成与参照表的不一致, 则删除或修改参照表中的所有造成不一致的元组。 3、设置为空值
删除或修改被参照表的一个元组造成不一致,则将参照 表中所有造成不一致的元组的对应属性设置为空值。
西南交通大学 《数据库原理及应用》第五章 第10页
取空值,有时又不能取空值。
例1中, 在学生-选课数据库中,Student为被参照关 系,其主码为Sno。关系SC的外码Sno同时也是SC的主
码中的一个属性,所以其外码不能取空值。
西南交通大学
《数据库原理及应用》第五章
第12页
5.2.2 参照完整性检查和违约处理 例2 假设专业表中某个元组被删除,即删除了某个专 业号。
的机制,使用了和实体完整性、参照完整性相同
的技术和方法来处理它们,而不必由应用程序承 担这一功能。
西南交通大学
《数据库原理及应用》第五章
第15页
5.3.1 属性上的约束条件的定义 在create table中定义属性的同时可以根据应用要求, 定义属性上的约束条件,即属性值限制,包括:
列值非空(NOT NULL短语)
CREATE TABLE Student (Sno Char(9) PRIMARY KEY, Sname Char(20), Sage Smallint, Sdept Char(20)) 或: CREATE TABLE Student (Sno Char(9), Sname Char(20), Sage Smallint, Sdept Char(20), PRIMARY KEY(Sno))
相关文档
最新文档