MySQL周内训参照4、触发器-插入-修改-删除

news2024/12/22 17:41:14

触发器

1、用户购买商品时,要求库存表中的库存数量自动修改

详细示例

delimiter $$
create trigger stock_change
after -- 事件触发在 下订单之后
insert -- 监视插入事件
on stock -- 监视 order订单表
for each row
begin
update stock set stock=stock-new.stock_qty where stock_id= new.stock_id; -- 注意这里是 old.id=new.tid
end 
$$
delimiter ;

 测试语句

-- 插入一些示例数据到stock表  
INSERT INTO stock  VALUES (10,'978-10',333,'2021-01-02 12:01:02');
  
-- 插入一个订单到order表,这将触发stock_change触发器  
INSERT INTO `order` (stock_id, quantity) VALUES (1, 10);  
  
-- 检查stock表以确认库存数量已经更新  
SELECT * FROM stock;

2、商品表修改语句添加触发器,要求在修改商品售价时不允许上下浮动超过10%。

详细示例

-- 创建一个名为books_check_price_change 的触发器
DELIMITER $$
-- 创建触发器,命名为books_check_price_change
 
-- 在books表的每一行数据更新之前执行此触发器
CREATE TRIGGER books_check_price_change 
BEFORE UPDATE ON books -- 在books表的每一行数据更新之前执行此触发器
FOR EACH ROW
begin 
	-- 编写代码的区域
	-- 声明一个变量来存储商品旧的价格
    DECLARE old_bprice DECIMAL(10, 2);
    -- 声明一个变量来存储商品新的价格
    DECLARE new_bprice DECIMAL(10, 2);
    -- 声明一个变量来存储价格变动的百分比
    DECLARE percentage_change DECIMAL(10, 2);
		
    -- 将旧的价格值赋给old_price变量,这里的OLD是MySQL提供的关键字,用于获取更新前的字段值
    SET old_bprice = OLD.bprice;
    -- 将新的价格值赋给new_price变量,NEW关键字用于获取更新后的字段值
    -- 如果是,则触发一个错误信号,并返回指定的错误消息
SET new_bprice = NEW.bprice;
    
    -- 接下来检查新的价格是否为0,因为商品的价格通常不应该为0
 if new.bprice=0 then
		SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '新价格不能为0。';
	end if;
	-- 题目要求加上上下浮动不得超过10%
	-- 计算价格变动的百分比
    -- 使用公式:(新价格 - 旧价格) / 旧价格 * 100
    -- 这里需要确保old_price不为0,否则除以0会导致错误
	set percentage_change = (new.bprice-old.bprice)/old.bprice*100;
	if abs(percentage_change)>10 then
		SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '价格上下浮动不得超过10%。';
		
	end if;
	-- 触发器执行完毕
end

 

 测试语句

-- 正常更新(未超过10%):
UPDATE books SET bprice = 50 WHERE bookname = '遨游神秘洋'; -- 应成功
 
-- 更新超过10%(触发错误):
UPDATE books SET bprice = 10 WHERE bookname = '遨游神秘洋'; -- 应触发错误

 

3、订购表删除语句添加触发器,要求在删除订购表信息时先删除发货单表中的订单信息。 

详细示例 

DELIMITER $$  -- 更改语句分隔符为$$,这样可以在触发器内部使用分号
CREATE TRIGGER delete_order_shipped
BEFORE DELETE ON `order`  -- 在`order`表执行DELETE操作之前触发order是关键字需要加上``区分关键字
FOR EACH ROW  -- 对每行被删除的数据执行一次触发器
BEGIN
    -- 删除与即将被删除的订单相关联的所有订单详情记录
    DELETE FROM shipped WHERE order_id = OLD.order_id;  -- OLD是MySQL中代表被删除行的关键字
END;
$$  -- 触发器定义结束
DELIMITER ;  -- 将语句分隔符改回为分号

 测试语句

DELETE FROM shipped WHERE `ship_id` = 2;

SELECT *	from shipped where ship_id=2;

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

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

相关文章

【LeetCode】七、树、堆、图

文章目录 1、树结构2、二叉树3、二叉树的遍历4、堆结构(Heap)5、堆化6、图 1、树结构 节点、根节点、叶子节点: 高度、深度、层三者的示意图: 2、二叉树 相比其他树,二叉树即每个节点最多两个孩子(两个分…

Java集合实例

一、什么是Java集合实例: 指的是在 Java 程序中创建和使用的集合对象,这些对象用于存储和操作数据。Java 集合框架提供了一系列的接口和实现类,用于管理不同类型的数据集合。 二、Java集合的主要实例类型: 1. List(列…

音视频入门基础:H.264专题(8)——H.264官方文档的描述符

音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…

平方根的三种求法(袖珍计算器算法,二分查找,牛顿迭代)

一、袖珍计算器 袖珍计算器方法主要运用到了我们高数上所学的关于e底数转化的思想&#xff0c;即 一种用指数函数 exp⁡ 和对数函数 ln⁡ 代替平方根函数的方法 : 1、exp函数&#xff1a; exp是 C 标准库 <math.h> 中的一个函数&#xff0c;用于计算 e 的 x 次幂&…

【Spring】SpringCloudAlibaba学习笔记

Nacos Nacos是一个更易于构建云原生应用的动态服务发现/服务配置和服务管理平台核心功能: 服务注册: Nacos Client会通过发送REST请求向Nacos Server注册自己的服务, 提供自己的元数据, 如ip地址/端口等信息; Nacos Server收到注册请求后, 就会把这些信息存储在Map中服务心跳:…

远程工具的使用

远程连接工具的作用&#xff0c;通过远程连接到服务器上&#xff0c;方便操作&#xff01; 1.常见的远程连接工具 XShell&#xff1a;这是一款Windows平台下的SSH客户端软件&#xff0c;支持SSH1、SSH2、SFTP、TELNET、RLOGIN等多种协议&#xff0c;功能丰富&#xff0c;包…

计算机二级Access操作题总结——综合应用

属性表相关 例1&#xff1a; 不允许输入和修改其中的数据→【是否锁定】 例2&#xff1a; 单击“退出”按钮(名为“bt2”)&#xff0c;调用设计好的宏“mEmp”来关闭窗体。 分组和汇总 对“rSell”报表进行适当设置&#xff0c;使每名雇员的姓名显示在该雇员所售书籍信…

Python学习笔记24:进阶篇(十三)常见标准库使用之数据压缩功能模块zlib,gzip,bz2,lzma的学习使用

前言 本文是根据python官方教程中标准库模块的介绍&#xff0c;自己查询资料并整理&#xff0c;编写代码示例做出的学习笔记。 根据模块知识&#xff0c;一次讲解单个或者多个模块的内容。 教程链接&#xff1a;https://docs.python.org/zh-cn/3/tutorial/index.html 数据压缩…

C语言的内存知识

这节我们主要认识一下内存&#xff0c;便于理解指针操作和后续内存管理。 一、内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 &#xff08;可以结合函数小节的函数栈帧部分看一下&#xff09; ⚪ 代码区:存放函数体的二进制代码&#xff0c;由操作系统进…

wgcloud怎么保证数据的安全性

WGCLOUD做了以下方面来保证数据安全 1、私有化部署 WGCLOUD是完全本地部署&#xff0c;没有云端服务&#xff0c;因此不用担心数据被他人获取 2、加密传输数据 WGCLOUD支持https传输数据&#xff0c;查看配置说明&#xff0c;实现使用SSL证书https访问server页面 - WGCLOUD…

第一后裔/The First Descendant延迟高的解决方法

第一后裔/The First Descendant是一款备受玩家关注的射击游戏&#xff0c;该作拥有多个角色&#xff0c;并为其设定不同的概念和战斗风格&#xff0c;以及技能点&#xff0c;不仅能让玩家畅快作战&#xff0c;还能通过各种道具&#xff0c;不断强化角色能力值&#xff0c;让其战…

Python 基础:使用 unittest 模块进行代码测试

目录 一、测试函数2.1 通过案例2.2 不通过案例2.3 添加新测试 二、测试类2.1 单个测试案例2.2 多个测试案例 三、总结 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 本文参考&#xff1a;《Python编程&#xff1a;…

Jenkins教程-9-发送企业微信测试报告通知

上一小节我们学习了Jenkins上下游关联自动化测试任务的构建的方法&#xff0c;本小节我们讲解一下发送企业微信测试报告通知的方法。 1、自动化用例执行完后&#xff0c;使用pytest_terminal_summary钩子函数收集测试结果&#xff0c;存入本地status.txt文件中&#xff0c;供J…

Arathi Basin (AB) PVP15

Arathi Basin &#xff08;AB&#xff09; PVP15 阿拉希盆地&#xff0c;PVP&#xff0c;15人战场

【银河麒麟】高可用触发服务器异常重启,处理机制详解

1.服务器环境以及配置 【机型】物理机 处理器&#xff1a; Intel 内存&#xff1a; 126G 【内核版本】 4.19.90-25.16.v2101.ky10.x86_64 【银河麒麟操作系统镜像版本】 Kylin-Server-10-SP2-Release-Shenzhen-Metro-x86-Build01-20220619 Kylin-HA-10-SP2-Release-S…

前端vue3 根据某些Id 筛选数据

现在有一些不等的数据 我需要通过前端 吧这个数据筛选一下 比如我使用一些 我需要的ID 下的数据 比如以上的数据 的 cinemaLineId 来筛选 const cinemaLineId ref(["1246429254713147392", "1182608813770321920", "1182608917403185152"])…

大数据之Hadoop部署

文章目录 服务器规划服务器环境准备1. 网络测试2. 安装额外软件包3. 安装基础工具4. 关闭防火墙5. 创建用户并配置权限6. 创建目录并设置权限7. 卸载JDK8. 修改主机名9. 配置hosts文件10. 重启服务器 配置免密登录安装Java安装Hadoop1. Hadoop部署2. 配置Hadoop3. 格式化Hadoop…

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用

【PyQt5】一文向您详细介绍 QVBoxLayout() 的作用 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xff1a;985高校的普通本硕&a…

机器人控制系列教程之URDF文件语法介绍

前两期推文&#xff1a;机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2)&#xff0c;我们主要从数学的角度介绍了机器人的动力学建模的方式&#xff0c;随着机器人技术的不断发展&#xff0c;机器人建模成为了机器人系统设计中的一项关键任务。URDF&…

我只有一点Python基础,对学习WebGIS开发有帮助吗?

经常有人后台私信问&#xff0c;我只有一点Python基础&#xff0c;对学习GIS开发有帮助吗&#xff1f; 关于这个问题的答案是&#xff0c;当然有&#xff01;Python适用于WebGIS开发。WebGIS是地理信息系统&#xff08;GIS&#xff09;技术与Web技术的结合&#xff0c;而Pytho…