数据库实验—触发器

news2024/12/23 9:51:24

在这里插入图片描述


  • 为Students创建一触发器,并给出正反实例的SQL语句:当插入或修改一条学生记录时,确保此学生的入学年龄在14~40岁之间。

    create trigger TRIGGER_Stu
    on Students
    for insert , update
    as
    declare @age int
    select @age=year(getdate())-year(Sbirth) from inserted
    if @age not between 14 and 40
    begin
    print '不符合年龄条件'
    rollback transaction
    end
    
  • 为Teachers表创建一触发器,并给出正反实例的SQL语句:男职工年龄不能超过60岁,女职工职称是“教授”的年龄不能超过60岁,其他女职工年龄不能超过55岁

    create trigger trigger_teach
    on Teachers
    for insert
    as
    declare @age int
    declare @gender varchar(2)
    declare @prof varchar(20)
    select @age=(year(getdate())-year(Tbirth)),
    @gender=Tgender,@prof=Tprof
    from inserted
    if @gender = '男' or (@gender='女' and @prof='教授')
    begin
    if @age > 60
    --begin
    print '超龄'
    rollback transaction
    --end
    end
    else
    if(@gender = '女')
    begin
    if(@age>55)
    --begin
    print '超龄'
    rollback transaction
    --end
    end
    
  • 为Teachers创建一触发器,并给出正反实例的SQL语句:当职称从“讲师”晋升为“副教授”时,岗位津贴(TComm)自动增加500元;从“副教授”晋升为“教授”时,岗位津贴自动增加900元;不允许越级晋升,也不能降级。

    create trigger trigger_teacher_prof
    on Teachers
    for update
    as
    declare @tno varchar(20)
    declare @up_prof varchar(20)
    declare @old_prof varchar(20)
    select @up_prof=Tprof,@tno=Tno from inserted
    select @old_prof from deleted
    if(@old_prof='讲师' and @up_prof='副教授')
    begin
    update Teachers set Tcomm=Tcomm+500 where Tno=@tno
    end
    else
    if(@old_prof='副教授' and @up_prof='教授')
    begin
    update Teachers set Tcomm=Tcomm+900 where Tno=@tno
    end
    else 
    if ((@old_prof='讲师' and @up_prof in ('讲师','副教授')) 
    or (@old_prof='助教' and @up_prof in ('助教','讲师')))
    begin
    print '不允许越级晋升'
    rollback transaction
    end
    
  • 为Reports表创建一触发器,并给出正反实例的SQL语句:当插入一条记录或修改成绩时,若记录不为空,则须确保此记录的成绩在0~100分之间

    create trigger TRIGGER_Rpt
    on Reports
    for insert,update
    as
    declare @grade decimal(5,2)
    select @grade=Grade from inserted
    if(@grade not between 0 and 100)
    begin
    print '成绩插入有误'
    rollback transaction
    end
    
  • 为选课表Reports增加一个属性列Level,并为该表创建一触发器,将成绩Grade按下列对应关系由分数转换成等级,并保存到Level列中:
    小于60分:不及格 60~70分:及格
    70 ~ 80分:中 80 ~ 90分:良
    90分以上:优

    alter table Reports add Re_Level varchar(10)
    
    • 如果直接使用语句设置变量值的话需要加set关键字
    create trigger TRIGGER_Rep
    on Reports
    for insert , update
    as
    declare @grade decimal(4,1)
    declare @level varchar(10)
    select @grade=Grade from inserted
    if(@grade between 60 and 70)
    begin 
    set @level='及格'
    end 
    else
    if(@grade between 60 and 70)
    begin 
    set @level='优'
    end 
    else
    begin 
    set @level='不及格'
    end 
    update Reports set Re_Level=@level
    
  • 创建一个学分表StuCredits,包含两个属性列(学号Sno,总学分TotalCredits),用来保存学生已获得的总学分数。
    为选课表Reports创建一触发器:当增加一条记录或修改成绩Grade时,重新统计该名学生获得的总学分,并将结果保存到StuCredits表中
    ① 当StuCredits表为空时,更新Reports表中的某条选课记录的成绩,然后查询StuCredits表中的数据;
    ② 当StuCredits表不为空时,选择该表中已有的某位学生,然后在Reports表中新增一条该学生的选课记录,并给出成绩(>=60),然后再查询StuCredits表中,该为学生总学分的变化。

    create table StuCredits(
    	Sno char(12) primary key,
    	TotalCredits int
    )
    
    create trigger reports_credits
    on Reports
    for insert,update
    as
    declare @sno char(12)
    declare @credit int
    select @sno=Sno from inserted
    select @credit=sum(C.Ccredit)
    from Reports R, Courses C
    where R.Cno = C.Cno and R.Sno = @sno and R.Grade > 60
    if(not exists(select * from StuCredits where Sno = @sno))
    begin
    insert into StuCredits values(@sno,isnull(@credit,0))
    end
    else 
    begin
    update StuCredits set TotalCredits = isnull(@credit,0)
    where Sno=@sno
    end
    

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

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

相关文章

微信小程序——二维码推广海报

&#x1f60a;博主&#xff1a;爱学习的Akali King &#x1f60a;本文核心&#xff1a;本地图片和接口返回二维码制作一体化canvas海报 目录 创建一个画布通过canvas API绘制图像细节1 长按保存细节2 创建一个画布 在微信小程序中&#xff0c;我们使用<canvas>标签来创建…

微信小程序web-view嵌入uni-app H5页面,通过H5页面跳转其他小程序如何操作?

1、H5页面代码 wx.miniProgram.reLaunch({ url: /pages/index/index?appId${您的微信小程序appId} });//触发小程序刷新页面获取appId 微信小程序appId查看方法&#xff1a; 1&#xff09;有后台登录权限的情况下&#xff1a;登录微信公众平台后&#xff0c; 微信公众平台微信…

linux——在VMware Workstation中配置固定IP

第一步&#xff1a; 第二步&#xff1a; 第三步&#xff1a; 第四步&#xff1a; 切换到root用户下&#xff1a;用vim打开文件&#xff0c;进行上面五处修改。 改动后的文件为&#xff1a;

C++刷题第三天

203 移除链表元素 题目描述 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 解题思路…

python3开发-火车票分析助手

目录 背景 思路 步骤&#xff1a; 代码示例 总结 背景 随着人们出行需求的增加&#xff0c;火车票的购买和使用变得越来越普遍。然而&#xff0c;对于火车票的信息和数据进行分析&#xff0c;可以帮助我们更好地了解旅行趋势、优化行程规划等。而Python是一门功能强大的编程…

finalshell使用方法,前端vue更新服务器项目

首先我们看看finalshell的整体 上面是xshell一样&#xff0c;可以输命令 上面是WinSCP一样&#xff0c;可以直接拖文件&#xff0c;下载&#xff0c;上传&#xff0c;可视化视图 1.下载服务器文件 服务器文件通过Jenkins打包上去的&#xff0c;首先我们把文件下载到本地 点击…

skimage.io.imread与cv2.imread读取图片的通道顺序不同

先说结论 skimage.io.imread读取的通道顺序为RGB, opencv读取的通道顺序为BGR。 在基于通道处理数据时注意区别。 示例如下&#xff1a; 对于一张彩色的村庄鸟瞰图&#xff0c; 其中道路为蓝色&#xff0c;我们提取出蓝色通道 并将其转为二值图输出&#xff0c;已验证提取出的…

深度学习视角下的视频息肉分割

结直肠癌(CRC)是全球第二大致命癌症和第三大常见的恶性肿瘤&#xff0c;据估计每年会在全球范围内造成数百万人发病和死亡。结直肠癌患者在第一阶段的生存概率超过95%&#xff0c;但在第四和第五阶段却大幅下降到35%以下。因此&#xff0c;通过结肠镜、乙状结肠镜等筛查技术对阳…

mysql基础1——发展起源、数据类型、基础安装

文章目录 一、基本了解1.1 DBMS数据库管理系统1.2 主流关系型数据库1.3 数据表概念1.4 关系型数据库的组成1.5 数据类型1.5.1 数值型1.5.1.1 整数型1.5.1.2 小数型 1.5.2 字符串型1.5.3 日期时间型1.5.4 枚举型 二、yum安装mariadb三、二进制安装mysql 一、基本了解 前提背景&a…

Flutter嵌套地狱

override Widget build(BuildContext context) {return Column(children: <Widget>[Container(height: 45,child: Row(children: <Widget>[SizedBox(width: 30,),Icon(Icons.notifications,color: Colors.blue,),SizedBox(width: 30,),Expanded(child: Text(消息中…

华为OD机试真题 Python 实现【计算网络信号】【2023Q2 200分】

一、题目描述 网络信号经过传递会逐层衰减&#xff0c;且遇到阻隔物无法直接穿透&#xff0c;在此情况下需要计算某个位置的网络信号值。 注意&#xff1a; 网络信号可以绕过阻隔物array[m][n]的二维数组代表网格地图&#xff0c;array[i][j]0代表i行j列是空旷位置&#xff…

大众点评搜索基于知识图谱的深度学习排序实践

转子&#xff1a;https://tech.meituan.com/2019/01/17/dianping-search-deeplearning.html 1. 引言 挑战与思路 搜索是大众点评App上用户进行信息查找的最大入口&#xff0c;是连接用户和信息的重要纽带。而用户搜索的方式和场景非常多样&#xff0c;并且由于对接业务种类多…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十八章 网络监听及防御技术)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、网络监听概述1、网络监听概念2、相关网络基础 二、监听技术1、局域网中的硬件设备简介2、共享式局域网的监听技术3、交换式局域网的监听技术 三、网络监听工具举例1、Tcp…

聚观早报 | 富士康被起诉;苹果公司股价再创新高

今日要闻&#xff1a;富士康被起诉&#xff1b;苹果公司股价再创新高&#xff1b;微信否认文件传输助手是真人&#xff1b;抖音外卖主攻60元以上套餐&#xff1b;消息称谷歌放弃研发AR智能眼镜 富士康被起诉 6 月 28 日消息&#xff0c;据外媒报道&#xff0c;美国电动卡车初…

服务注册与配置Nacos

服务注册与配置Nacos nacos 介绍nacos 特性nacos 的安装nacos 注册中心注册中心案例注册中心原理nacos服务分级存储模型 nacos 配置中心nacos 配置数据模型nacos 配置管理配置文件优先级nacos 配置持久化 nacos 集群部署 nacos 介绍 nacos 英文全称 Dynamic Naming and Config…

wsl子系统Ubuntu18.04,cuDNN安装

如果觉得本篇文章对您的学习起到帮助作用&#xff0c;请 点赞 关注 评论 &#xff0c;留下您的足迹&#x1f4aa;&#x1f4aa;&#x1f4aa; 本文主要wls子系统Ubuntu18.04安装cuDNN&#xff0c;安装cudnn坑巨多&#xff0c;因此记录以备日后查看&#xff0c;同时&#xff0…

【云原生 | 56】Docker三剑客之Docker Swarm高效使用

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 &#x1f3c5;阿里云ACE认证高级工程师 &#x1f3c5;阿里云开发者社区专…

PPT怎么插入视频?3个视频插入方法分享!

Anna是个初入职场的新人&#xff0c;最近要进行工作汇报&#xff0c;需要制作PPT并插入相关的讲解视频。但她对PPT的运用不熟悉&#xff0c;不知道应该如何操作&#xff01;特此来询问应该如何在PPT中插入视频&#xff1f; 在演示文稿中插入视频可以使PPT更加生动有趣。无论是展…

如何克服自动化测试中的壁垒和问题?

随着自动化测试技术的快速发展和普及&#xff0c;自动化测试已经成为各个行业广泛应用的重要测试手段。然而&#xff0c;自动化测试中仍然存在壁垒和问题&#xff0c;这些问题可能对测试效果产生影响&#xff0c;甚至会影响整个项目的进程。在本文中&#xff0c;我们将探讨如何…

JavaScript进阶----《getter 和 setter 是什么》

前言&#xff1a; 这两个属性在学习前端的时候看到过&#xff0c;但是由于项目中没有用到过&#xff0c;所以一直没有细致的了解。今天 review 同事代码的时候&#xff0c;遇到了这个写法&#xff0c;看了半天也不知道如何处理。再不学习真的以后连别人的代码都不知道什么意思了…