【SQL实验】触发器
下载素材文件”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
相关文章:
【SQL实验】触发器
下载素材文件”tsgl”、“成绩管理”,将tsgl.bak和成绩管理.bak数据库还原到库中【导入操作在之前的文章中详细讲过】 触发器 1、为图书表设置更新触发器,根据总编号来更新书名、作者、出版社、分类号和单价(根据总编号找到相应记录,然后更新书名、作者…...
C语言:二维数组在内存中是怎么存储的
目录 1. 二维数组的定义: 2. 行主序存储: 具体内存排列: 3. 如何通过指针访问数据: 4. 总结: 在 C 语言中,二维数组是按 行主序(row-major order) 存储的。也就是说,…...
CPU多级缓存机制
目录 一、前置知识 ---- CPU的核心 1.1. 单核与多核CPU 二、CPU多级缓存机制 三. 缓存的基本结构/缓存的存储结构 四、CPU缓存的运作流程/工作原理 五、CPU多级缓存机制的工作原理【简化版】 5.1. 缓存访问的过程 (5.1.1) L1缓存(一级缓存)访问 …...
Ansible剧本-playbook
Ansible剧本-playbook 1 playbook基础1.1 简介1.2 playbook的组成结构Task 任务列表任务报错,如何继续执行响应事件Handler 1.3 常用选项执行playbookplaybook查询帮助信息校验playbook语法测试playbook能否正常运行 2 变量 的定义方式2.1 定义规则2.2 vars 变量2.3…...
神经网络八股(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天指导手册——从入门到精通》以系统化学习路径为核心&…...
C++知识点总结与复习
c中常见的关键字(面试题中经常出现) const 总结常见用法: const int a; //定义了常量整形的变量 a; 常量表示不可修改,定义的时候必须初始化。除此之外,和 int a;使用一样。 const int * p;//定义了指向常量整形变量的指针。…...
微信小程序实现拉卡拉支付
功能需求:拉卡拉支付(通过跳转拉卡拉平台进行支付),他人支付(通过链接进行平台跳转支付) 1.支付操作 //支付 const onCanStartPay async (obj) > {uni.showLoading({mask: true})// 支付接口获取需要传…...
全面汇总windows进程通信(二)
在Windows操作系统下,实现进程间通信(IPC, Inter-Process Communication)有几种常见的方法,包括使用管道(Pipe)、共享内存(Shared Memory)、消息队列(Message Queue)、命名管道(Named Pipe)、套接字(Socket)等。本文介绍如下几种: 信号量(Semaphore)和互斥量(…...
Unity 第三人称人物切动画时人物莫名旋转
前提: 使用Starter Asset包中的第三人称插件包. 在给3D角色的动画器增加新动画时, 发现进入新动画会让角色莫名转动. 观察后发现是动画强行将朝向掰"正", 人物动画在进行时朝向会一直变化, 这使得动作非常的怪异. 对系动画进行以下处理后, 将可以解决这种不自然: 选…...
启动Redis报错记录
突然启动Redis就报了个错:‘Could not create server TCP listening socket 127.0.0.1:6379: bind: 操作成功完成。‘ 查了下解决方案,应该是6379端口已绑定,服务没有关闭。 需要输入命令redis-cli 再输入shutdown 但又出现了新的问题&…...
vue2响应式数据原理
1. 核心原理 Vue 2 的响应式系统基于 Object.defineProperty,通过 依赖收集 和 派发更新 来实现数据的响应式 依赖收集:在读取数据时,记录哪些函数(或组件)依赖了该数据。派发更新:在修改数据时ÿ…...
OpenBMC:BmcWeb实例化App
BmcWeb是OpenBMC的一个核心模块,对外负责响应Redfish请求,并且由于OpenBMC的Web使用的Redfish api,所以BmcWeb也是Web的后台。 1.main函数 //src\webserver_main.cpp #include "webserver_run.hpp"int main(int /*argc*/, char** /*argv*/) noexcept(false) {re…...
二级公共基础之数据库设计基础(一) 数据库系统的基本概念
目录 前言 一、数据库、数据管理系统和数据库系统 1.数据 2.数据库 3.数据库管理系统 1.数据库管理系统的定义 2.数据库管理系统的功能 1.数据定义功能 2.数据操作功能 3.数据存取控制 4.数据完整性管理 5.数据备份和恢复 6.并发控制 4.数…...
自然语言处理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…...
leetcode_动态规划/递归 70. 爬楼梯
70. 爬楼梯 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路: 考虑: 假设现在已经爬到了某一阶台阶,那是如何到达这里的呢?可能是从前一阶台阶爬上来的&am…...
VoIP之音频3A技术
音频3A技术是改善语音通话质量的三种关键技术的简称,包括声学回声消除(Acoustic Echo Cancellation, AEC)、自动增益控制(Automatic Gain Control, AGC)、自噪声抑制(Automatic Noise Suppression, ANS&…...
SpringBoot 03 Web开发
SpringBoot 代替了SSM整合,避免了版本依赖冲突,不在需要手写配置文件 前言 springboot提供了starter场景启动器(web,Tomcat,jdbc),自带相关组件实现自动配置 场景启动器 一、自动配置 1.自动…...
官方文档学习TArray容器
一.TArray中的元素相等 1.重载一下 元素中的 运算符,有时需要重载排序。接下来,我们将id 作为判断结构体的标识。 定义结构体 USTRUCT() struct FXGEqualStructInfo {GENERATED_USTRUCT_BODY() public:FXGEqualStructInfo(){};FXGEqualStructInfo(in…...
Web刷题之PolarDN(中等)
1.到底给不给flag呢 代码审计 一道典型的php变量覆盖漏洞 相关知识 什么是变量覆盖漏洞 自定义的参数值替换原有变量值的情况称为变量覆盖漏洞 经常导致变量覆盖漏洞场景有:$$使用不当,extract()函数使用不当,parse_str()函数使用不当&…...
Https通信中证书验证流程
在 HTTPS 通信中,客户端验证服务器证书的有效性是确保通信安全的重要步骤。这一过程通常被称为 证书链验证 或 SSL/TLS 证书验证。以下是详细的流程和实现细节: 1. 证书验证的整体流程 客户端验证服务器证书的有效性主要包括以下几个步骤: …...
学习笔记-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 统计…...
