数据库系统概论

数据库的完整性

数据库的完整性是指数据的正确性相容性
数据的正确性,是指数据是符合现实世界语义,反映了当前实际状况的
数据的相容性 ,是指数据库同一对象在不同关系表中的数据是符合逻辑的
数据要符合客观世界的要求,如学号只能是唯一的,性别只有男女,要有课程才能选课等。
为维护数据库的完整性,数据库管理系统必须:
1. 提供定义完整性约束条件的机制
完整性约束条件也称为完整性规则,是数据库中的数据 必须满足的语义约束条件
SQL 标准使用了一系列概念来描述完整性,包括关系模
型的实体完整性、参照完整性和用户定义完整性
这些完整性一般由 SQL 的数据定义语言语句来实现
2. 提供完整性检查的方法
数据库管理系统中检查数据是否满足完整性约束条件的机制称
为完整性检查。
一般在 INSERT UPDATE DELETE 语句执行后开始检 查,也可以在事务提交时检查
3. 违约处理
数据库管理系统若发现用户的操作违背了完整性约束条件,就
采取一定的动作
拒绝( NO ACTION )执行该操作
级连( CASCADE )执行其他操作

 1、实体完整性

在创建表时用primary key定义 primary key——定义主码                                                                主码可以是单个属性,也可以是多个属性的集合。

1.1定义实体完整性

实体完整性的约束条件 1.列级约束条件,2.表级约束条件

列级约束条件

在快要写完一个属性(可以看作一行)后,在后面用primary key 定义列级约束条件

表级约束条件

在写完所有的属性列后,再快要结束的时候将上述所写的属性,用

primary key(属性1,属性2.……)定义表级约束条件

对于单个属性构成的主码,我们既可以使用列级约束条件也可以用表级约束条件。

多个属性构成的主码,我们只能用表级约束条件。

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

插入或对主码列进行更新操作时,关系数据库管理
系统按照实体完整性规则自动进行检查。包括:
1、检查主码值是否唯一,如果不唯一则拒绝插入或修改
主码可以有多个属性合在一起,但每个属性中的元组不能是有重复的值
2、检查主码的各个属性是否为空,只要有一个为空就拒绝插入或修改
主码是不能为空的,多个属性构成的主码,则这多个属性都不能为空

检查记录中的主码值是否唯一的一种方法是全表扫描——依次判断表中每一天记录的主码值与将插入记录的主码值是否相同。

但是全表扫描很浪费时间,为了避免其进行扫描,关系数据库管理系统一般都在主码上自动建立一个索引——B+树索引(还没学过B+树,后面再补)。

2、参照完整性

参照完整性就是表于表之间的关系构成的一个完整性。在 CREATE TABLE 中用 FOREIGN KEY外键) 短语定义哪些列为外码REFERENCES 短语指明这些外码参照哪些表的主码

参照完整性只能在表级定义,我的外键只能是你的主码。

你的表中作为主码被我参照(引用)作为我的表的外键,你被我参照,你被称为被参照表(主表)我被称为子表(从表)

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

一个参照完整性将两个表中的相应元组联系起来
对被参照表和参照表进行增删改操作时有可能破
坏参照完整性,必须进行检查以保证这两个表的相容性。
参照完整性违约处理 , 参照完整性的约束条件
1 ) 拒绝( NO ACTION )执行
不允许该操作执行。该策略一般设置为默认策略
2 ) 级联( CASCADE )操作
当删除或修改被参照表( Student )的一个元组造成了 与参照表( SC )的不一致,则删除或修改参照表中的 所有造成不一致的元组
3 )设置为空值( SET-NULL
当删除或修改被参照表的一个元组时造成了不一致,则 将参照表中的所有造成不一致的元组的对应属性设置为 空值

 被参照表  

参照表
违约处理
可能破坏参照完整性
插入元组
拒绝
可能破坏参照完整性
修改外码值

参照表的外键就是被参照表的主码

参照表中插入元组中包含外键,但是被参照表主码没有这个元组,被参照表的主码没有这个值,那么进行参照表进行插入元组是会被拒绝(被参照表没有这个元组对应的主码,参照表就不能插入这个元组)

修改外码值与插入一样,如果你修改后外码在在被参照表中找不到主码元组,则拒绝。

 被参照表  

参照表
违约处理
删除元组
可能破坏参照完整拒绝 / 级连删除 / 设置为空值
修改主码值
可能破坏参照完整
拒绝 / 级连删除 / 设置为 空值

被参照表是主表,当主表中主码对应的值进行删除时,参照表的外键也包含这这个值 ,就会分情况进行违约处理。

1、拒绝删除,

2、级联删除,主表对应主码的元组删除了,子表对应的也删除。  

3、设置为空值,当删除或修改被参照表的一个元组时造成了不一致,则 将参照表中的所有造成不一致的元组的对应属性设置为空值。

这里我们要定义参照完整性时进行选择参照完整性

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 /* 级联删除 SC 表中相应的元组 */
 ON UPDATE CASCADE, /* 级联更新 SC 表中相应的元组 */
 FOREIGN KEY (Cno) REFERENCES Course(Cno) 
 
 ON DELETE NO ACTION 
 /* 当删除 course 表中的元组造成了与 SC 表不一致时拒绝删除 */
 ON UPDATE CASCADE 
 /* 当更新 course 表中的 cno 时,级联更新 SC 表中相应的元组 */
 );

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

建议:

对于delete(删除操作),当删除被参照表中的元组,造成于参照表的不一致时,拒绝删除被参照表的元组。

对于update(更新操作),则采用级联更新,当被参照表中的元组更新,对应的将参照表的元组也更新。

3、用户定义的完整性

用户定义的完整性是:针对某一具体应用的数据必须满足的语义要求
如性别只能取男和女两个选择不能是其他的
关系数据库管理系统提供了定义和检验用户定义完整性的机制,不必由应用程序承担

3.1属性上的约束条件 

(1)列值非空( NOT NULL
(2)列值唯一( UNIQUE
(3)检查列值是否满足一个条件表达式( CHECK
                                         create table
 CREATE TABLE Studet1(
     SNO CHAR(9) PRIMARY KEY NOT NULL,
     SNAME VARCHAR(20) UNIQUE NOT NULL,
     SSEX CAHR(5)CHECK(SSEX IN ('男','女'))
    );
不允许取空值
列值唯一
检查列值是否满足一个条件表达式( CHECK

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

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

3.3元组上约束条件的定义

CREATE TABLE 时可以用 CHECK 短语定义 元组上的约束条件,即 元组级的限制。
同属性值限制相比,元组级的限制可以设置不同 属性之间的取值的相互约束条件。

 

CREATE TABLE Student( 
Sno CHAR(9), 
Sname CHAR(8) NOT NULL ,
Ssex CHAR(2),
Sage SMALLINT,
Sdept CHAR(20),
PRIMARY KEY (Sno),
CHECK (Ssex=' 女 ' OR Sname NOT LIKE 'Ms.%')/* 定义了元组中 Sname 和 Ssex 两个属性值之间的约束条件 *
 );
性别是女性的元组都能通过该项检查,因为 Ssex=‘ 女’成立 ;
当性别是男性时,要通过检查则名字一定不能以 Ms. 打头

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

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

4、完整性约束命名子句 

4.1命名

用于完整性约束条件命名,从而更加灵活的删除一个完整性约束条件。

语法:完整性约束命名子句 CONSTRAINT < 完整性约束条件名 >< 完整性约束条件 >

CREATE TABLE Student
 ( Sno NUMERIC(6)
 CONSTRAINT C1 CHECK (Sno BETWEEN 90000 AND 99999),
 Sname CHAR(20) 
 CONSTRAINT C2 NOT NULL,
 Sage NUMERIC(3)
 CONSTRAINT C3 CHECK (Sage < 30),
 Ssex CHAR(2)
 CONSTRAINT C4 CHECK (Ssex IN ( ‘ 男’ ,' 女 ')),
 CONSTRAINT StudentKey PRIMARY KEY(Sno)
 );
Student 表上建立了 5 个约束条件,包括主码约束(命名为
StudentKey )以及 C1 C2 C3 C4 四个列级约束。

4.2修改完整性

去掉表中年龄小于30的约束

ALTER TABLE Student DROP CONSTRAINT C3;
修改约束条件的话,可以先删除原来的约束条件,再增加新的约束条件。
如将学号改为再1~100之间
先删除:ALTER TABLE Student DROP CONSTRAINT C1;
再增加:
ALTER TABLE Student
ADD CONSTRAINT C1 CHECK (Sno BETWEEN 1 AND 100);
相关语句说明
show create table student详细展示student表的结构,属性,完整性等
select  *from student显示student表的全部数据,*是一个通配符
drop table student;将student表删除

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值