【SQL实验】触发器

embedded/2025/2/24 2:46:41/

下载素材文件”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
asif ((select count(*) from tCourse,tScore where tCourse.课程编号=tScore.课程编号 and 课程名='数据库')>3)begindelete 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.ppmy.cn/embedded/164726.html

相关文章

迅为RK3568开发板篇Openharmony配置HDF控制UART-UART 接口运作机制

在 HDF 框架中,串口接口适配模式采用独立服务模式,如下图所示: 如上图所示,每个设备对象会独立发布一个设备服务来处理外部访问,设备管理器接收到API 的访问请求之后,通过提取该请求的参数,达…

芯谷D668:便携式录音机与耳机式盒式录音机的理想音频解决方案

在便携式音频设备领域,录音机和耳机式盒式录音机因其便携性和多功能性一直受到用户的青睐。芯谷科技推出的D668集成电路,凭借其集成的多功能设计,成为这些设备的理想选择。 一、D668的电路特性 1. 多功能集成设计 D668电路内部集成了双声道…

MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2

第02章_MySQL的数据目录 1. MySQL8的主要目录结构 1.1 数据库文件的存放路径 MySQL数据库文件的存放路径:/var/lib/mysql/ MySQL服务器程序在启动时会到文件系统的某个目录下加载一些文件,之后在运行过程中产生的数据也都会存储到这个目录下的某些文件…

三、linux字符驱动详解

在上一节完成NFS开发环境的搭建后,本节将探讨Linux字符设备驱动的开发。字符设备驱动作为Linux内核的重要组成部分,主要负责管理与字符设备(如串口、键盘等)的交互,并为用户空间程序提供统一的读写操作接口。 驱动代码…

2.1作业

1 #web351curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $resultcurl_exec($ch);echo ($result);【提示不允许外部】对应源码:$_SERVER(remoteaddr): ?urlhttp://127.0.0.1/flag.php 伪…

【Windows系统node_modules删除失败(EPERM)问题解析与应对方案】

Windows系统node_modules删除失败(EPERM)问题解析与应对方案 问题现象 当开发者尝试删除Node.js项目的node_modules目录时,常会遇到如下错误提示: [Error: EPERM: operation not permitted, unlink D:\project\...\esbuild.exe] {errno: -4048,code: …

x安全服务 y安全体系 z网络安全模型 网络安全体系设计

这一年来,网络安全行业兴奋异常。各种会议、攻防大赛、黑客秀,马不停蹄。随着物联网大潮的到来,在这个到处都是安全漏洞的世界,似乎黑客才是安全行业的主宰。然而,我们看到的永远都是自己的世界,正如医生看…

halcon 条形码、二维码识别、opencv识别

一、条形码 函数介绍 create_bar_code_model * 1.创建条码读取器的模板 * 参数一:通用参数的名称,针对条形码模型进行调整。默认值为空 * 参数二:针对条形码模型进行调整 * 参数三:条形码模型的句柄。 create_bar_code_model (…