数据库||数据库的完整性

1.实验题目:数据库的完整性

2.实验目的和要求:

掌握数据库的实体完整性约束定义,完整性检查及违约处理方式。

掌握数据库的参照完整性约束定义,完整性检查及违约处理方式。

掌握数据库的用户定义完整性约束定义,完整性检查及违约处理方式。

掌握触发器的定义及使用。

 3.实验步骤:

  1. 按实验内容要求完成各项操作
  2. 根据题目要求给出解决方案
  3. 提交实验报告

4.实验内容:

1.完整性约束的定义

1.1 定义S, C表,定义实体完整性约束,定义学生的年龄在19到22岁之间,课程名唯一的约束

--建表
Create table S
(Sno char(10),
Sname char(10),
Sex char(10),
Age smallint  check (age <22 and age > 19),
Dept char(10),
Primary key(Sno)
)
Create table C
( Cno char(10),
Cname char(10) unique,
Ccredit char(10),
Cpno char(10),
Primary key (Cno)
)Insert Into SValues('42101','赵君君','男',19,'CS'),('42102','赵小花','女',22,'MA'),('42103','赵小明','男',27,'MA'),('42104','赵宇宇','男',18,'CS'),('42105','赵兰兰','女',17,'IS');
Insert Into CValues('1','CS','2',4),('2','MA','3',2),('3','IS','1',7);select * from S;
select * from C;

1.2 在C表中增加cpno字段,cpno字段为先修课号,定义cpno为外码,参照C表的cno,并定义当删除被参照表中相关记录时,要求违约处理方式为拒绝。

Alter table C

Add constraint FK_CPNO

FOREIGN key(CPNO)

REFERENCES C(CNO)

ON delete NO action

ON update NO action;

1.3 定义SC表的实体集参照完整性约束,要求当其被参照表发生删除操作时,S表违约处理的方式为级联,当其被参照表发生修改操作时,违约处理的方式为拒绝。

Create table sc

(SNO char(30),

CNO char(6),

GRADE smallint,

PRIMARY key(SNO,CNO),

FOREIGN key(sno) REFERENCES s(sno)

ON delete cascade

ON update NO action,

FOREIGN key(cno) REFERENCES c(cno)

ON delete cascade

ON update NO action);

2.触发器

2.1 建立一DML触发器,每当学生的成绩发生更新时,检查更新的学号是否满足0-100分之间,如果不满足则不允许更新,如满足则将更新的学号,成绩存入g-log表内

create trigger upsc on sc

for update

as  

     if update(g)

     begin

     declare @gr smallint

     select @gr=inserted.g from   inserted

     if (@gr<0 or @gr>100)

begin

   print'成绩录入不合规范'

   rollback transaction

end

   else  

    insert into glog select inserted.sno,g from  inserted

end 

2.2 建立一个INSTEAD OF触发器,一次只允许删除一条记录每当删除课程表中的记录超过一条时,则不允许删除,且给出提示信息“删除记录一次不可超过一条”

create trigger del_tri

on c

instead of delete

as

begin 

declare @n smallint

Select  @n=count(*) from deleted

If @n>1

Print 删除记录一次不可超过一条

rollback

End

5.实验总结

本次实验主要为了了解数据库的实体完整性约束定义,完整性检查及违约处理方式。

练习数据库的参照完整性约束定义,完整性检查及违约处理方式和数据库的用户定义完整性约束定义,完整性检查及违约处理方式。并且在一定程度上学习掌握触发器的用法。

6.思考题

1.参照完整性约束的违约判定和处理规则是什么?

答:参照完整性的违约判定和处理规则:

被参照表

参照表

违约处理

可能破坏参照完整性

插入元组

拒绝

可能破坏参照完整性

修改外码值

拒绝

删除元组

可能破坏参照完整性

拒绝(NO ACTION)/级联删除(CASCADE)/设置为空值

修改主码值

可能破坏参照完整性

拒绝(NO ACTION)/级联删除(CASCADE)/设置为空值

2.简述AFTER触发器和INSTEAD OF触发器的区别。

答:INSTEAD OF 触发器 用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。

AFTER 触发器 定义了对表执行了 INSERT、UPDATE 或 DELETE 语句操作之后再执行的操作。AFTER 触发器只能在表上指定,且动作晚于约束处理。每一个表上只能创建一个 INSTEAD OF 触发器,但可以创建多个 AFTER 触发器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/690760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何构建企业专属GPT

大语言模型&#xff08;LLM&#xff09;具有令人印象深刻的自然语言理解和生成能力&#xff0c; 2022年11月底OpenAI发布了ChatGPT&#xff0c;一跃成为人工智能AI领域的现象级应用。但由于LLM的训练数据集主要来源于互联网数据&#xff0c;企业私域信息并未被LLM所训练&#x…

MySQL进阶 - 备份与恢复

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 知…

gowin GW1N4 OSC IP 使用

创建工程 1. File 选项下&#xff0c;选择新建工程New.. 2.Name 是指工程名&#xff1b;Creat in 指工程路径&#xff1b; 3.选择对应的 器件&#xff0c;本测试示例使用的是 GW1N4BLV_LQFP144C6I5; 4.选择好器件型号&#xff0c;单击Finish; 5.给工程增加VerilogFile 即 .v …

IDEA2023版本创建Spring项目只能勾选17和21却无法使用Java8

问题&#xff1a;新建springboot项目时&#xff0c;发现java版本只有17和21 解决办法&#xff1a;将server URL中的https://start.spring.io/更换成http://start.springboot.io/或者https://start.aliyun.com/ 截图如下&#xff1a; 原因分析 Spring官方发布Spring Boot 3.0.0…

【JVM篇】什么是运行时数据区

文章目录 &#x1f354;什么是运行时数据区⭐程序计数器⭐栈&#x1f50e;Java虚拟机栈&#x1f388;栈帧的内容 &#x1f50e;本地方法栈 ⭐堆⭐方法区 &#x1f354;什么是运行时数据区 运行时数据区指的是jvm所管理的内存区域&#xff0c;其中分为两大类 线程共享&#xf…

【小呆的力学笔记】弹塑性力学的初步认知四:简单应力状态下的应力应变关系

文章目录 2. 简单应力状态下的应力应变关系2.1 简单拉伸的应力应变关系2.2 真实应力应变关系2.3 应力-应变关系简化模型 2. 简单应力状态下的应力应变关系 我们在高中就学过&#xff0c;弹簧拉伸力和变形量成比例&#xff0c;对于一般的金属材料&#xff0c;在一定载荷以内这种…

Elasticsearch如何设置密码

目录 一、配置1.修改配置文件2.设置密码3.修改密码 二、验证 一、配置 1.修改配置文件 修改配置文件 config/elasticsearch.yml&#xff0c;写入以下配置&#xff1a; xpack.security.enabled: true discovery.type: single-node xpack.security.transport.ssl.enabled: tru…

【数据结构】二叉树根节点到特定节点路径(C语言版)

二叉树——根节点到特定节点路径查找 一、思路二、代码实现 一、思路 使用二叉链表创建的二叉树&#xff0c;这里我的思路是用链栈来存放找寻二叉树特定节点中&#xff0c;用来存放节点元素 个人思路&#xff1a;创建链栈&#xff0c;遍历二叉树并把路径中节点元素存放到栈中&…

【iOS】系统框架

文章目录 前言四十七、熟悉系统框架四十八、多用块枚举&#xff0c;少用for循环四十九、对自定义其内存管理语义的collection使用无缝桥接五十、构建缓存时选用NSCache而非NSDictionary五十一、精简initialize与load的实现代码五十二、别忘了NSTimer会保留其目标对象 前言 本次…

E. Final Countdown

思路&#xff1a;对于每一位统计贡献&#xff0c;不难发现&#xff0c;假设数为12345&#xff0c;个位的贡献就是12345&#xff0c; 十位的贡献是1234&#xff08;仅当个位跳转时产生贡献&#xff09;&#xff0c;百位贡献是123,后面同理。 12345 1234 123 12 1 …

Stable Diffusion 模型下载:Dark Sushi Mix 大颗寿司Mix

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 Dark Sushi Mix 大颗寿司Mix 是一个动漫大模型&#xff0c;绘制的图片色彩丰富…

网络运行安全

网络运行安全 第一节 一般规定 第二十一条 国家实行网络安全等级保护制度。网络运营者应当按照网络安全等级保护制度的要求,履行下列安全保护义务,保障网络免受干扰、破坏或者未收授权的访问,防止网络数据泄露或者被窃取、篡改: 制定内部安全管理制度和操作规程,确定网络…

【MySQL初阶】索引

1. 索引基本概念 1.1 索引介绍 索引(index)&#xff1a;是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。&#xff08;具体细节在MySQL进阶章节详…

SNAT与DNAT公私网地址转换

前言 SNAT和DNAT是两种重要的网络地址转换技术&#xff0c;它们允许内部网络中的多个主机共享单个公共IP地址&#xff0c;或者将公共IP地址映射到内部网络中的特定主机。这些技术在构建企业级网络和互联网应用程序时非常重要&#xff0c;因为它们可以帮助保护内部网络安全&…

安全名词解析-攻防演练

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 攻防演练 01 攻防演练 《网络安全法》中明确提出&#xff0c;“定期组织关键信息基础设施的运营者进行网络安全应急演练&#xff0c;提高应对网络安全事件的水平和协同配合能力。”攻防演练目前已经…

0、电源管理入门之开篇即巅峰

目录 1. 电源状态介绍 2. Linux 电源管理的组成 3. ARM SoC中PCSA与SCP 4. SoC设计中的电源管理 “人是铁饭是钢,一顿不吃饿得慌”,对于嵌入式设备而言,没有电一切都白瞎,特别是带电池的终端嵌入式设备,对电能的管理尤其重要,也是我们调试设备的一个重点。可以说…

linux高级作业

作业需求 1、openEuler 二进制方式安装MySQL 8.0.x。 二、备份数据库 3.备份数据库school到/backup目录 4.备份MySQL数据库为带删除表的格式&#xff0c;能够让该备份覆盖已有数据库而不需要手动删除原有数据库 5.直接将MySQL数据库压缩备份 第一题 1、openEuler 二进制方式…

爬虫知识--01

爬虫介绍 # 爬虫的概念&#xff1a; 通过编程技术(python:request,selenium)&#xff0c;获取互联网中的数据(app&#xff0c;小程序&#xff0c;网站)&#xff0c;数据清洗(xpaht&#xff0c;lxml)后存到库中(mysql&#xff0c;redis&#xff0c;文件&#xff0c;excel&#x…

如何选择合适的三防平板?

一、随着移动互联网的快速发展&#xff0c;平板电脑作为一种轻便、易携带的移动设备已经成为了人们生活中必不可少的一部分。在一些特殊的工作环境下&#xff0c;例如工地、野外等场景&#xff0c;常规的平板电脑可能无法满足使用要求&#xff0c;因此人们需要选择一款具有防水…