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

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…

LeetCode 3028.边界上的蚂蚁

边界上有一只蚂蚁&#xff0c;它有时向 左 走&#xff0c;有时向 右 走。 给你一个 非零 整数数组 nums 。蚂蚁会按顺序读取 nums 中的元素&#xff0c;从第一个元素开始直到结束。每一步&#xff0c;蚂蚁会根据当前元素的值移动&#xff1a; 如果 nums[i] < 0 &#xff0…

如何从 git 分支中合并特定文件,而不是整个分支的内容

问题 在git 中&#xff0c;我们可以使用 git merge 命令&#xff0c;合并整个分支&#xff0c;覆盖当前分支的内容&#xff0c;但是有时候我们并不想这么做&#xff0c;而是想 merge 某个文件。那么下面提供两种办法。 方法一 使用 git checkout&#xff0c;从别的分支&…

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…

Nginx介绍和使用

Nginx是一个高性能的HTTP和反向代理web服务器&#xff0c;其使用方法包括安装、配置以及与其他软件的配合使用。 Nginx被广泛认为是一个轻量级、占用资源少、并发处理能力强大的web服务器软件。它不仅可以作为HTTP服务器提供静态内容服务&#xff0c;还可以作为反向代理服务器…

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

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

leetcode刷题记录:二叉树02(思路篇)

参考labuladong的算法小抄&#xff1a;https://labuladong.online/algo/data-structure/binary-tree-part1/ 复习二叉树纲领篇&#xff0c;二叉树解题的思维模式分两类&#xff1a; 1、是否可以通过遍历一遍二叉树得到答案&#xff1f;如果可以&#xff0c;用一个 traverse 函…

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;遍历二叉树并把路径中节点元素存放到栈中&…

Xilinx(AMD) 7系列FPGA配置引脚说明

xilinx 7系列FPGA配置引脚 下表详细描述了xilinx7系列FPGA所有配置引脚及其功能。 Pin NameBanktypeDirectionDescriptionCFGBVS0dedicatedIBank0电压选择&#xff0c;当Bank0电压为2.5v/3.3v时该引脚上拉到VCCO_0&#xff0c;如果Bank0工作于1.8V该引脚下拉接地。对于只能工…

【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;因为它们可以帮助保护内部网络安全&…