【SQL实验】触发器

news2025/2/26 0:13:27

下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】

触发器
1、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。

被触发事件就是一个print语句

after (for)触发器“触发事件”和“被 触发事件”都执行

----------创建ts更新触发器2----------
--create trigger ts更新触发器2
--on ts
--after update
--as
--	print '图书表更新成功'


----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_2'
--where 总编号 = 999999

2、为dz表插入触发器dz_insert,在插入记录后提示“借书证号为XXXX的读者记录已被插入”,其中XXXX为插入的具体字段值;

--use 图书管理

----------创建dz的插入触发器----------
--create trigger dz插入触发器
--on dz
--after insert
--as
--begin
--	declare @x nvarchar(10)
--	select @x = 借书证号
--	from inserted
--	print '借书证号为' + @x + '的读者记录已被插入'
--end

----------dz插入触发器的测试----------
--insert into dz
--values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424')

 声明变量 @x,用于存储借书证号

从 inserted 表中获取插入记录的 借书证号

   

3、为图书表设置更新触发器,根据总编号来更新书名(根据图书编号找到相应记录,更新书名),更新完毕后提示“更新后的总编号为:XX,书名为:XX”(其中XX代表相应字段的值);

   输入update语句,例如将总编号为J007的图书名改为网络安全基础,测试更新触发器。

----------创建ts更新触发器----------
--create trigger ts更新触发器
--on ts
--after update
--as
--begin
------声明变量
--	declare @x nvarchar(10)		--总编号
--	declare @a nvarchar(10)		--书名
------从inserted表中找出修改的编号
--	select @x = 总编号,@a = 书名 
--	from inserted

------输出结果
--	print '更新后的总编号为:'+@x+',书名为:'+@a
--end

----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_1'
--where 总编号 = 999999

 变量需要先声明再赋值

赋值 

select语句不能同时完成赋值和查询两种操作

4、为ts设置删除触发器,若删除ts记录,则jy表中的相关书籍的记录也应删除,并提示“ts表和jy表相关记录已一并删除” ;编写测试语句进行测试。

---------创建ts删除触发器----------
--create trigger ts删除触发器
--on ts
--after delete
--as 
--begin
--	declare @x nvarchar(10)
--	select @x = 总编号
--	from deleted
--	delete from jy
--	where 总编号 = @x
--	print 'ts表和jy表相关记录已一并删除'
--end

----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 445501

5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。

  

----------创建ts禁止删除触发器----------
--create trigger ts禁止删除
--on ts
--instead of delete
--as 
--print '对不起,不允许删除操作'

----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 999999

6、为“成绩管理”数据库中的tscore表设置触发器,限制“数据库”课程选课人数不超过3人,若选满,则提示“对不起,已选满!”

create trigger trigger8
on tScore
after insert
as
    if ((select count(*) from tCourse,tScore where tCourse.课程编号
                  =tScore.课程编号 and 课程名='数据库')>3)
    begin
           delete from tScore where 学号 in (select 学号 from inserted)      
           and 课程编号=(select 课程编号 from tCourse where 课程名=‘
                            数据库')
            print'对不起,已选满!'
    end

完整代码:

--一、触发器

--1、为dz表和ts表设计分别在插入记录后提示“借书证号为XXXX的读者记录已被插入”或“总编号为XXXX的图书记录已被插入”,
--其中XXXX为插入的具体字段值;写一条insert语句,插入记录,对插入触发器进行测试。

--use 图书管理

----------创建dz的插入触发器----------
--create trigger dz插入触发器
--on dz
--after insert
--as
--begin
--	declare @x nvarchar(10)
--	select @x = 借书证号
--	from inserted
--	print '借书证号为' + @x + '的读者记录已被插入'
--end

----------dz插入触发器的测试----------
--insert into dz
--values('999','信息系','ceshi','男',1999-07-01,'教授','1号楼424')

----------创建ts的插入触发器----------
--create trigger ts插入触发器
--on ts
--after insert
--as
--begin
--	declare @x nvarchar(10)
--	select @x = 总编号
--	from inserted
--	print '总编号为' + @x + '的图书记录已被插入'
--end

----------ts插入触发器的测试----------
--insert into ts
--values('999999','ceshi','张三','电子工业出版社','TP',24)





--2、为图书表设置更新触发器,根据图书编号来更新书名、作者、出版社、分类号和单价
--(根据图书编号找到相应记录,然后更新书名、作者等信息),
--更新完毕后提示“更新后的总编号为:XX,书名为:XX”
--(其中XX代表相应字段的值);输入update语句,例如将图书编号为J007的图书名改为网络安全基础,测试更新触发器。

--use 图书管理

----------创建ts更新触发器----------
--create trigger ts更新触发器
--on ts
--after update
--as
--begin
------声明变量
--	declare @x nvarchar(10)		--总编号
--	declare @a nvarchar(10)		--书名
------从inserted表中找出修改的编号
--	select @x = 总编号,@a = 书名 
--	from inserted

------输出结果
--	print '更新后的总编号为:'+@x+',书名为:'+@a
--end

----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_1'
--where 总编号 = 999999


--3、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,
--然后更新书名、作者等信息),更新完毕后提示“图书表更新成功”;编写测试语句进行测试。

----------创建ts更新触发器2----------
--create trigger ts更新触发器2
--on ts
--after update
--as
--	print '图书表更新成功'


----------测试ts更新触发器----------
--update ts set 书名 = 'ceshi_2'
--where 总编号 = 999999




--4、为dz表设置删除触发器,若删除dz记录,则jy表中相关记录也应删除,
--并提示“dz表和jy表相关记录已一并删除” ;编写测试语句进行测试。

----------创建ts删除触发器----------
--create trigger ts删除触发器
--on ts
--after delete
--as 
--begin
--	declare @x nvarchar(10)
--	select @x = 总编号
--	from deleted
--	delete from jy
--	where 总编号 = @x
--	print 'ts表和jy表相关记录已一并删除'
--end

----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 445501

--5、为ts创建instead of 触发器,当删除某条记录时,显示“对不起,不允许删除操作” ;编写测试语句进行测试。

----------创建ts禁止删除触发器----------
--create trigger ts禁止删除
--on ts
--instead of delete
--as 
--print '对不起,不允许删除操作'

----------测试ts删除触发器----------
--delete from ts
--where 总编号 = 999999




--6、使用查看命令查看dz表中已创建的触发器;使用命令查看某各触发器代码。

--sp_helptrigger @tabname = ts
--sp_helptext ts插入触发器




--7、修改某触发器的名称。

--sp_rename ts删除触发器, ts删除



--8、方法一、替换触发器
--create trigger 触发器1 on tScore
--instead of insert
--as 
--begin
--  declare @sum nvarchar(50)
--  select @sum=COUNT(课程编号) from tScore 
--  where 课程编号=(select 课程编号 from tCourse    where 课程名='数据库')
--  if @sum>3
--      print '对不起,已选满'
--  else
--      insert into tScore select * from inserted
--end
--方法二:后触发器
--create trigger trigger8
--on tScore
--after insert
--as
--    if ((select count(*) from tCourse,tScore where tCourse.课程编号
--                  =tScore.课程编号 and 课程名='数据库')>3)
--    begin
--           delete from tScore where 学号 in (select 学号 from inserted)      
--           and 课程编号=(select 课程编号 from tCourse where 课程名=‘
--                            数据库')
--            print'对不起,已选满!'
--    end




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

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

相关文章

CPU多级缓存机制

目录 一、前置知识 ---- CPU的核心 1.1. 单核与多核CPU 二、CPU多级缓存机制 三. 缓存的基本结构/缓存的存储结构 四、CPU缓存的运作流程/工作原理 五、CPU多级缓存机制的工作原理【简化版】 5.1. 缓存访问的过程 (5.1.1) L1缓存(一级缓存)访问 …

神经网络八股(3)

1.什么是梯度消失和梯度爆炸 梯度消失是指梯度在反向传播的过程中逐渐变小,最终趋近于零,这会导致靠前层的神经网络层权重参数更新缓慢,甚至不更新,学习不到有用的特征。 梯度爆炸是指梯度在方向传播过程中逐渐变大,…

SmartMediakit之音视频直播技术的极致体验与广泛应用

引言 在数字化时代,音视频直播技术已经深入到各个行业和领域,成为信息传递和交流的重要手段。视沃科技自2015年成立以来,一直致力于为传统行业提供极致体验的音视频直播技术解决方案,其旗下的大牛直播SDK凭借强大的功能和卓越的性…

【R包】tidyplots----取代ggplot2的科研绘图利器

文章目录 介绍安装Usage文档参考 介绍 tidyplots----取代ggplot2的科研绘图利器。tidyplots的目标是简化为科学论文准备出版的情节的创建。它允许使用一致和直观的语法逐渐添加,删除和调整情节组件。 安装 You can install the released version of tidyplots fro…

DeepSeek 15天指导手册——从入门到精通 PDF(附下载)

DeepSeek使用教程系列--DeepSeek 15天指导手册——从入门到精通pdf下载: https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指导手册——从入门到精通》以系统化学习路径为核心&…

微信小程序实现拉卡拉支付

功能需求:拉卡拉支付(通过跳转拉卡拉平台进行支付),他人支付(通过链接进行平台跳转支付) 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…

Unity 第三人称人物切动画时人物莫名旋转

前提: 使用Starter Asset包中的第三人称插件包. 在给3D角色的动画器增加新动画时, 发现进入新动画会让角色莫名转动. 观察后发现是动画强行将朝向掰"正", 人物动画在进行时朝向会一直变化, 这使得动作非常的怪异. 对系动画进行以下处理后, 将可以解决这种不自然: 选…

启动Redis报错记录

突然启动Redis就报了个错:‘Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。‘ 查了下解决方案,应该是6379端口已绑定,服务没有关闭。 需要输入命令redis-cli 再输入shutdown 但又出现了新的问题&…

自然语言处理NLP 04案例——苏宁易购优质评论与差评分析

上一篇文章,我们爬取了苏宁易购平台某产品的优质评价和差评,今天我们对优质评价与差评进行分析 selenium爬取苏宁易购平台某产品的评论-CSDN博客 目录 1. 数据加载 2. 中文分词 3. 停用词处理 4. 数据标注与合并 5. 数据集划分 6. 文本特征提取 …

图片爬取案例

修改前的代码 但是总显示“失败” 原因是 修改之后的代码 import requests import os from urllib.parse import unquote# 原始URL url https://cn.bing.com/images/search?viewdetailV2&ccidTnImuvQ0&id5AE65CE4BE05EE7A79A73EEFA37578E87AE19421&thidOIP.TnI…

官方文档学习TArray容器

一.TArray中的元素相等 1.重载一下 元素中的 运算符,有时需要重载排序。接下来,我们将id 作为判断结构体的标识。 定义结构体 USTRUCT() struct FXGEqualStructInfo {GENERATED_USTRUCT_BODY() public:FXGEqualStructInfo(){};FXGEqualStructInfo(in…

Web刷题之PolarDN(中等)

1.到底给不给flag呢 代码审计 一道典型的php变量覆盖漏洞 相关知识 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当&…

学习笔记-250222

论文: Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models 主要研究llm在图像分类中的能力,当提示输入目标类别时,llm能够生成相关的描述以及相应的结构化关系。 1.首先利用llm从普通的描述中获…

Unity游戏制作中的C#基础(1)界面操作基础

1.脚本有关注意事项 (1).进入项目之后,一般创建一个文件夹Scripts用来存放c#脚本; (2).在Scripts中创建脚本,双击脚本,进入VS编辑器,有如下结构: start&#…

为什么要将PDF转换为CSV?CSV是Excel吗?

在企业和数据管理的日常工作中,PDF文件和CSV文件承担着各自的任务。PDF通常用于传输和展示静态的文档,而CSV因其简洁、易操作的特性,广泛应用于数据存储和交换。如果需要从PDF中提取、分析或处理数据,转换为CSV格式可能是一个高效…

Android KMP初探

Android KMP初探 前言: 最近线上听了Kotlin官网举行的KMP会议,感觉听神奇的,于是就把官方demo下载下来尝试了一下,下载插件和所需要的依赖都用了很久,但是发现里面的代码很少,于是尝试自己手写了一下&…

网络安全之Web后端PHP

目录 一、PHP基础语法 1.PHP基础 (1)php的优点 (2)PhpStorm的优点 2.PHP基本语法 3.PHP变量 4.PHP运算符 二、PHP流控与数组 1.php流程控制语句以及循环 (1)if 语句 (2)if…

Redis——用户签到BitMap,UV统计

目录 BitMap 使用场景 1. 用户签到系统 2. 用户行为标记 3. 布隆过滤器(Bloom Filter) BitMap介绍 Redis中的使用 Redis功能示例 添加: 获取: 批量获取: java中实现 统计本月连续签到次数 UV统计 UV 统计…

pycharm技巧--鼠标滚轮放大或缩小 Pycharm 字体大小

1、鼠标滚轮调整字体 设置 Ctrl 鼠标滚轮调整字体大小 备注: 第一个是活动窗口,即缩放当前窗口 第二个是所有编辑器窗口,即缩放所有窗口的字体 2、插件 汉化包: Chinese Simplified 包

数字信任的底层逻辑:密码学核心技术与现实应用

安全和密码学 --The Missing Semester of Your CS Education 目录 熵与密码强度密码散列函数密钥体系 3.1 对称加密 3.2 非对称加密信任模型对比典型应用案例安全实践建议扩展练习杂项 密码学是构建数字信任的基石。 本文浅析密码学在现实工具中的应用,涵盖 1&…