数据库系统概论——完整性

一、完整性概述

数据库的完整性是指数据库中数据的正确性、一致性、相容性

  • 正确性:保证进入数据库的数据是符合语义约束的合法数据
  • 一致性:保证数据之间的逻辑关系是正确的,对数据库更新时,数据库从一个一致状态到另一个一致状态
  • 相容性:同一个事实的两个数据应当是一致的

1.1约束分类

完整性约束分类
miGzkR.png
从约束的状态的角度考虑

  • 静态约束:关于数据库正确状态的约束
  • 动态约束:数据库从一种正确状态转移到另一种状态的转移约束

1.2 DBMS对完整性的支持

  • 提供定义完整性约束条件的机制
  1. 完整性约束条件也称为完整性规则,是数据库中的数据必须满足的语义约束条件
  2. SQL标准使用了一系列概念来描述完整性,包括关系模型的实体完整性、参照完整性和用户定义完整性
  3. 一般由SQL的数据定义语言语句来实现
  • 提供完整性检查的方法
  1. 数据库管理系统中检查数据是否满足完整性约束条件的机制称为完整性检查
  2. 一般在 insert、update、delete语句执行后开始检查,也可以在事务提交时检查
  • 违约处理
  1. 数据库管理系统若发现用户的操作违背了完整性约束条件,就采取一定的动作
  2. 拒绝(no action)执行该操作
  3. 级连(cascade)执行其他操作

1.3完整性和安全性区别

  • 数据的完整性
  1. 防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据
  2. 防范对象:不合语义的、不正确的数据
  • 数据的安全性
  1. 保护数据库 防止恶意的破坏和非法的存取
  2. 防范对象:非法用户和非法操作

1.4完整性约束命名

constraint <完整性约束条件名><完整性约束条件>
--<完整性约束条件>包括not null、unique、primary key短语、foreign key短语、check短语等

--建立教师表TEACHER,要求每个教师的应发工资不低于3000元(应发工资是工资列Sal与扣除项Deduct之和)
create table TEACHER(
    Eno numeric(4) primary key,  /*在列级定义主码*/
    Ename char(10),
    Job char(8),
    Sal numeric(7,2),
    Deduct numeric(7,2),
    Deptno numeric(2),
    constraint TEACHERFKey foreign key (Deptno) references dept(Deptno),
    constraint c1 check (Sal + Deduct >= 3000)
    );
--使用 alter table语句修改表中的完整性限制

--修改表Student中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40
--可以先删除原来的约束条件,再增加新的约束条件
alter table Student
drop constraint c1;

alter table Student
add constraint c1 check (Sno between 900000 and 999999),
alter table Student
drop constraint c3;

alter table Student
add constraint c3 check(Sage < 40);

二、实体完整性

实体完整性规则:关系 R的所有元组在主码上的值必须唯一,且主码上的任何属性不能为空值
删除操作不会破坏实体完整性,插入新元组和修改某个(些)元组的主码可能破坏实体完整性
SQL支持实体完整性,用户只需在创建基本表时说明关系的主码,系统就能自动地保证实体完整性

2.1 SQL中的实体完整性

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

  • 定义为列级约束条件
  • 定义为表级约束条件

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

  • 定义为表级约束条件
--将Student表中的Sno属性定义为码,primary key表示主码
--在列级定义主码
create table Student(
    Sno char(9) primary key,
    Sname  char(20) not null,
    Ssex  char(2),
    Sage  int,
    Sdept  char(20)
    );
--在表级定义主码
    create table Student(
    Sno char(9),
    Sname char(20) not null,
    Ssex char(2),
    Sage int,
    Sdept char(20),
    primary key (Sno)
    );

--将SC表中的Sno,Cno属性组定义为码
create table SC(
    Sno char(9) not null,
    Cno char(4) not null,
    Grade int,
    primary key (Sno,Cno)  /*只能在表级定义主码*/
    );

2.2检查和违约处理

插入或对主码列进行更新操作时要

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

检查记录中主码值是否唯一时,为避免对基本表进行全表扫描,RDBMS核心一般都在主码上自动建立一个索引
B+树索引
miJSt1.png
新插入记录的主码值是25

  1. 通过主码索引,从B+树的根结点开始查找
  2. 读取3个结点:根结点(51)、中间结点(12 30)、叶结点(15 20 25)
  3. 该主码值已经存在,不能插入这条记录

三、参照完整性

参照完整性规则:如果属性集 FK是关系 R的外码,且参照关系 S的主码 Ks,则 R的任何元组在 FK上的值或者等于 S的某个元组在主码 Ks上的值,或者为空值
如果关系数据库模式由 E-R图转换得到,则由联系集转换得到的每一个关系都存在参照完整性约束

3.1违反参照完整性的更新

违反参照完整性的情况及违约处理
miYSbQ.png
更新破坏参照完整性的可能措施

  • 拒绝:不允许该操作执行。该策略一般设置为默认策略
  • 级联:进行更新,且对更新导致违反参照完整性的参照关系元组进行相应更新
  • 置空值:进行更新,且对更新导致违反参照完整性的参照关系元组的外码置空值。仅当外码允许取空值时才能使用
  • 置缺省值:进行更新,且对更新导致违反参照完整性的参照关系元组的外码置空值;其中缺省值必须是被参照关系某元组主码上的值

3.2 SQL中的参照完整性

foreign key短语定义哪些列为外码,references短语指明这些外码参照哪些表的主码

foreign key (A1,...,An) references <外表名> (<外表主码>)
[<参照触发动作>]
--指出修改和删除违反参照完整性约束时触发的动作;缺省时,违反参照完整性的修改和删除将被拒绝
--参照触发动作可以是以下两种
on update <参照动作> [on delete <参照动作>]
on delete <参照动作> [on update <参照动作>]
--参照动作可以是拒绝、级联、置空值、置缺省值之一

--关系SC中(Sno,Cno)是主码。Sno,Cno分别参照Student表的主码和Course表的主码定义SC中的参照完整性
create table SC(
    Sno char(9) not null,
    Cno char(4) not null,
    Grade int,
    primary key (Sno, Cno),  /*在表级定义实体完整性*/
    foreign key (Sno) references Student(SNO),  /*在表级定义参照完整性*/
    foreign key (Cno) references Course(Cno)    /*在表级定义参照完整性*/
    );

四、用户定义的完整性

4.1域约束

每个属性都必须在一个值域上取值
在原理上类似于编程语言中变量的类型,就像不同变量可以有相同的数据类型,不同的属性可以有相同的域
声明一个域包括:域值类型,缺省值,域值的格式,对取值范围或取值集合的约束
不同域上的值不能比较

--创建域
create domain <域名> [as] <数据类型>
[default <缺省值>]
[<域约束>,...,<域约束>]

--修改域
alter domain <域名> <修改动作>
/*
修改动作
    set default <缺省值>:设置缺省值
    drop default:删除缺省值
    add <域约束>:添加域约束,其中<域约束>与 create domain相同
    drop constraint <约束名>:删除<约束名>命名的域约束
*/

--删除域
drop domain <域名> {cascade | restrict}

4.2断言

断言是一种命名约束,表达了数据库状态必须满足的逻辑条件

--创建断言
create assretion <断言名>
check (<条件>) [<约束性质>]
--每个断言都被赋予一个名字,<check 子句>中的约束条件与 where子句的条件表达式类似

--限制数据库课程最多60名学生选修
create assertion ASSE_SC_DB_NUM
check ( 60 >= (
        select count(*)
        /*此断言的谓词涉及聚集操作count的SQL语句*/
        from Course,SC
        where SC.Cno=Course.Cno and Course.Cname ='数据库'
        ));

--删除断言
drop assertion <断言名>

五、触发器

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

  • 指明什么事件发生和满足什么条件执行触发器
  • 指明触发器执行什么样的动作
  • 存储在数据库系统中
  • 任何用户对表的增、删、改操作均由服务器自动激活相应的触发器

5.1定义触发器

create trigger <触发器名>
    {before | after} <触发事件> on <表名>
    referencing new|old row as<变量>
    for each  {row | statement}
    [when <触发条件>]<触发动作体>

/*
触发器又叫做事件-条件-动作规则
当特定的系统事件发生时,对规则的条件进行检查,如果条件成立则执行规则中的动作,否则不执行该动作。规则中的动作体可以很复杂,通常是一段SQL存储过程
*/

语法说明

  • 表的拥有者才可以在表上创建触发器
  • 触发器名
  1. 触发器名可以包含模式名,也可以不包含模式名
  2. 同一模式下,触发器名必须是唯一的
  3. 触发器名和表名必须在同一模式下
  • 表名
  1. 触发器只能定义在基本表上,不能定义在视图上
  2. 当基本表的数据发生变化时,将激活定义在该表上相应触发事件的触发器
  • 触发事件
  1. 触发事件可以是INSERT、DELETE或UPDATE,也可以是这几个事件的组合
  2. 还可以UPDATE OF<触发列,...>,即进一步指明修改哪些列时激活触发器
  3. AFTER/BEFORE是触发的时机:
    AFTER表示在触发事件的操作执行之后激活触发器
    BEFORE表示在触发事件的操作执行之前激活触发器
  • 触发器类型
  1. 行级触发器
  2. 语句级触发器
  • 触发条件
  1. 触发器被激活时,只有当触发条件为真时触发动作体才执行;否则触发动作体不执行
  2. 如果省略WHEN触发条件,则触发动作体在触发器激活后立即执行
  • 触发动作体
  1. 触发动作体可以是一个匿名PL/SQL过程块,也可以是对已创建存储过程的调用
  2. 如果是行级触发器,用户都可以在过程体中使用NEW和OLD引用事件之后的新值和事件之前的旧值
  3. 如果是语句级触发器,则不能在触发动作体中使用NEW或OLD进行引用
  4. 如果触发动作体执行失败,激活触发器的事件就会终止执行,触发器的目标表或触发器可能影响的其他对象不发生任何变化

5.2激活触发器

触发器的执行,是由触发事件激活的,并由数据库服务器自动执行
一个数据表上可能定义了多个触发器,遵循如下的执行顺序

  1. 执行该表上的BEFORE触发器
  2. 激活触发器的SQL语句
  3. 执行该表上的AFTER触发器

5.3删除触发器

drop trigger <触发器名> on <表名>

转载于:https://www.cnblogs.com/xxwang1018/p/11546732.html

【数据库系统概论】-数据库完整性 数据库的完整性是指数据的正确性和相容性。 数据库的完整性和安全性是两个不同的概念:数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意的破坏和非法的存取。因此,完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。安全性控制的防范对象是非法用户和非法操作,防止他们对数据库数据的非法存取。 1、提供定 阅读详情

相关推荐

三相电机控制中的端电压、相电压与线电压波形解析

本文深入解析了三相电机控制中端电压、相电压与线电压的核心概念与波形差异。通过对比方波控制、SPWM和SVPWM三种主流控制策略下的实测波形特征,揭示了不同控制逻辑对电压波形(如梯形波、正弦波、马鞍波)的影响。文章重点阐述了SVPWM控制如何通过生成马鞍波形端电压来提高直流母线电压利用率,并提供了实用的波形测量与调试指南,帮助工程师深入理解电机控制原理并进行有效调试。

qsc901234567的博客 1403

第五章——数据库完整性

数据库的完整性(integrity)是指数据的正确性(correctness)和相容性(compat-ability) 数据的正确性是指数据是符合现实世界语义、反映当前实际状况的 数据的相容性是指数据库同一对象在不同关系表中的数据是符合逻辑的 数据的完整性是为了防止数据库中存在不符合语义的数据,也就是防止数据库中存在不正确的数据。数据的安全性是保护数据库防止恶意破坏和非法存取。 完整性检查和控制的防范对象是不合语义的、不正确的数据,防止它们进入数据库。

Miss Z的博客 6192

5.1 Tessent Atpg系列 第八章 Test Pattern Generation - Verify Test Pattern

为什么要做基于timing的仿真,意义在于可以比较ATPG工具和simulator工具的差异性。因为时序的差异导致不同的结果。首先你需要通过write_patern 这句cmd来写出pattern,默认是parallel 模式,除非你用-serial 指定写出serial, 因为serial 文件非常大,所以你可以使用-sample 开关写出部分pattern即可,工具会根据每一种pattern 类型都会至少保存一只。 另外,你也可以使用-start -end 开关来减少文件大小,但是这样的截取,是不可靠的

ciscomonkey的博客 7766

数据库的完整性

一、什么是数据库完整性 数据库的完整性是指数据库中数据的正确性和相容性。 数据库完整性由各种完整性约束来保证。而完整性约束既可以通过DBMS来保障,也可以通过应用程序来实现。如果是基于DBMS,完整性约束将作为关系模式的一部分存入数据库,也就是说,直接在数据库进行定义。 二、完整性的保护措施 1、约束条件 对数据库中数据设置一些约束条件,作完整性检查。完整性约束条件的作用对象可以是关系(即表)、元组(即行)、属性(即字段、列)。约束在表中定义,运行时检查,发现条件不满足即通知用户,以便采取措施。 数据库约束

左直拳的马桶_日用桶 1万+

华硕ROG枪神双系统实战:Ubuntu安装避坑指南

本文是华硕ROG枪神笔记本安装Ubuntu双系统的详细避坑指南。针对其独特的硬件与BIOS设计,文章核心解决了VMD控制器导致硬盘无法识别、驱动兼容性等关键难题,并提供了从BIOS设置、分区方案到安装后驱动配置与性能调优的一站式解决方案,帮助用户实现稳定的双系统体验。

raspberrypi5的博客 546

DeepSeek 在 PostgreSQL 中,执行 `DELETE` 操作后,数据占用的空间并不会立即释放给操作系统

操作后,数据占用的空间并不会立即释放给操作系统。这是 PostgreSQL 的 MVCC(多版本并发控制)机制决定的——删除的数据只是被标记为“死元组”,物理空间仍然被表占用。这是最彻底的释放方式,会将表重写为一个没有空洞的新文件,将空间返回给操作系统。如果你的表非常大(如几百GB),或者这是生产环境的核心表,建议优先考虑。你可以告诉我你的表大概多大、是否能接受锁表,我可以给你更精确的建议。要真正释放空间,需要根据你的实际需求,从以下三种方案中选择一种。如果你既想彻底释放空间,又无法接受锁表,

m0_37843156的博客 405

数据库——完整性

目录 一、完整性概述 1.1约束分类 1.2 DBMS对完整性的支持 1.3完整性和安全性区别 1.4完整性约束命名 二、实体完整性 2.1 SQL中的实体完整性 2.2检查和违约处理 三、参照完整性 3.1违反参照完整性的更新 3.2 SQL中的参照完整性 四、用户定义的完整性 4.1域约束 4.2断言 五、触发器 5.1定义触发器 5.2激活触发器 5.3删...

享受孤独 6768

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

基于STC8G1K08A单片机的PCA捕获外部信号(100~1000HZ)程序实现

weixin_74013772的博客 256

【数据库概论】第五章 数据库完整性

用户定义的完整性就是针对某一具体应用的数据必须满足的语义要求。目前DBMS都提供了定义和检验这类完整性的机制。触发器又叫做事件——条件——动作规则。当特定的系统事件发生的时候,则会对规则的条件进行检查。创建触发器的指令如下:CREATE TRIGGER {BEFORE|AFTER} ON REFERENCEING NEW|OLD ROW AS [WHEN ]

weixin_45434953的博客 2971

基于 STM32 的智能冰箱食材管理与过期提醒系统设计

define MAX_FOOD 20 // 最多存储20种食材#define EXPIRE_WARN 3 // 剩余≤3天触发提醒// RFID卡号4字节// 食材名称// 保质期(天)// 入库日期// 0=空槽,1=有效。

weixin_42300449的博客 58

具身智能中的(VLA)算法与实践——第一讲 基础与概览

本文介绍了视觉-语言-动作(VLA)模型的基础概念及其在AI领域的重要性。VLA模型通过融合多模态数据实现具身智能,使AI系统能感知环境并执行物理动作。文章探讨了大型语言模型(LLMs)和视觉语言模型(VLMs)如何赋能具身智能,包括指令解析、场景理解和动作规划。同时提供了Python、PyTorch/TensorFlow开发环境的详细搭建指南,包含GPU配置建议和测试代码。VLA模型在机器人操作、导航、人机协作等领域具有广泛应用前景,是实现通用人工智能的关键技术。

u012133341的博客 1599

密码学笔记1-信息安全的基本属性(机密性、认证、完整性、不可否认性)

机密性(confidentiality):保证信息被授权者使用而不泄露给未授权者;即让未授权者看不到信息或者看不懂信息; 认证(Authentication):认证包括消息认证和身份认证; 消息认证:消息认证包括消息源认证(消息来源未被冒充)和消息完整性(消息未被篡改) 身份认证:保证通信实体的真实性 证明“你就是你” 完整性(Integrity):数据完整性和系统完整性 数据完整性:数据未被未授权篡改或损坏 系统完整性:系统未被非授权操控,按既定的程序运行 系统没有被“动过” 不可否认性(Non-repu

jiangqiubai12381的博客 2万+

Python爬虫实战:贝壳找房二手房数据全维度抓取与成交分析(反爬突破+数据建模+可视化)

本次实战的核心不是“写爬虫脚本”,而是“构建一套贴合房产分析的贝壳找房数据抓取与分析体系”——从反爬突破保证数据获取的稳定性,到多维度分析挖掘房产的投资/居住价值,最终落地到具体的购房、投资决策。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2746

数据库系统概论(第6版 王珊 杜小勇 陈红)第五章 数据库完整性 课后习题答案

本文整理了《数据库系统概论》第五章关于数据库完整性的习题解答,内容包括:数据库完整性的定义及其与安全性的区别;完整性约束机制的三项功能;参照完整性的实现要点;通过SQL语句定义主码、参照完整性及年龄限制等约束;违反完整性约束时的处理方式;以及创建断言限制来宾人数等实例。同时提供了补充习题及其答案,涵盖选择题、填空题和综合应用题,涉及主码定义、CHECK约束、触发器使用等内容,为学习者掌握数据库完整性知识提供了全面参考。

s_a_g_a的博客 2155

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

数据库系统概论——实体完整性 & MySQL实现

基于《数据库系统概论》和《数据库系统概念》,阐述了数据库的实体完整性及其相关概念并基于MySQL数据库和SQL语言进行实现

qq_44486439的博客 992

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

数据库系统概论——完整性约束条件设置方法

基于《数据库系统概论》和《数据库系统概念》,阐述了数据库的完整性约束如何增删改及其相关概念

qq_44486439的博客 1511

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

数据库系统概论 实验四 数据控制(完整性)

1实验目的 1.熟悉通过SQL对数据进行完整性控制。 2.完成书本上习题的上机练习。 2实验工具MYSQL 利用KingbaseES及其交互式查询工具ISQLW来熟悉SQL。 3实验内容和要求 使用SQL对数据进行完整性控制(3类完整性、CHECK短语、CONSTRAIN子句、触发器)。用实验证实,当操作违反了完整性约束条件时,系统是如何处理的。根据以下要求认真填写实验报告,记...

qq_30501975的博客 1万+

数据库系统概论之完整性语言实验

数据库系统概论之完整性语言实验

LucianaiB的博客 997

数据库系统概论——参照完整性 & MySQL实现

基于《数据库系统概论》和《数据库系统概念》,阐述了数据库的参照完整性及其相关概念并基于MySQL数据库和SQL语言进行实现

qq_44486439的博客 2148

数据库系统概论——数据库完整性概述

基于《数据库系统概论》和《数据库系统概念》,概述了数据库的完整性及其相关概念

qq_44486439的博客 771

【数据库系统概论】关系的完整性(实体完整性、参照完整性、用户定义的完整性)

数据完整性就是对关系的某种**约束条件**。确保数据库中数据的**正确性**。这些约束条件实际上就是现实世界的要求。比如我们要建立一张学生表,**学生(学号,姓名,性别,专业号,年龄)**,我们要求用户在更新这张表的数据时,遵循一些约束条件,而不是随便的更新数据。比如要求学号必须存在、专业号必须存在、年龄必须在某个范围内等等。

m0_60511809的博客 2825

数据库系统概论:数据库完整性

用户自定义完整性针对某一具体应用所涉及的数据必须满足的语义要求,目前的关系数据库管理系统都提供了定义和检验这类完整性的机制,使用了和实体完整性、参照完整性相同的技术和方法来处理它们,而不必由应用程序承担这一功能。属性上的条件约束:在中定义属性的同时,可以根据应用要求定义属性上的约束条件NOTNULL:列值非空UNIQUE:列值唯一短语:检查列值是否满足一个条件表达式-- ...

热带鱼的技术博客 1383

《数据库系统概论》5——数据库完整性

《数据库系统概论》5——数据库完整性

m0_65036580的博客 2094

数据库系统概论课堂笔记-完整性约束

一、完整性约束条件 1.实体完整性 实体完整性:理解为对客观世界的实体来说,例如学生的学号这一属性,应该是唯一存在的。所以实体完整性表现为:PRIMARY KEY(主键) PRIMARY KEY:属性唯一,属性不为空。 注意:单属性主码才可以定义为列级实体完整性,多属性主码只能定义为表级实体完整性。 2.参照完整性 参照完整性:多个关系表之间如果有外键相...

weixin_38753309的博客 1230

数据库系统概论——用户定义完整性 & MySQL实现

基于《数据库系统概论》和《数据库系统概念》,阐述了数据库的用户定义完整性及其相关概念并基于MySQL数据库和SQL语言进行实现

qq_44486439的博客 2004

【数据库系统概论】第5章-数据库完整性

定义(1)属性上的约束(列级)// checkSsex CHAR(2) CHECK (Ssex IN ('男',女’) ) ,/*性别属性Ssex只允许取'男'或'女' */(2)元组上的约束元组级的限制(表级约束)可以设置不同属性之间的取值的相互约束条件Sdept CHAR(20) default 18, // 列默认CHECK (Ssex='女' OR Sname NOT LIKE 'Ms.%')/*定义了元组中Sname和 Ssex两个属性值之间的约束条件*/检查时机。

qq_61832249的博客 1501
上一篇: 数据库系统概论——基础概念
下一篇: 数据库系统概论——安全性
SmallProgramer3121
博客等级 码龄11年 3粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值