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

触发器

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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ROT5、ROT13、ROT18、ROT47全系列加解密小程序

ROT5、ROT13、ROT18、ROT47全系列加解密小程序 这几天在看CTF相关的课程,涉及到古典密码学和近代密码学还有现代密码学。自己编了一个关于ROT全系列的加、解密小程序。 ​ ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性&a…

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

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

开发自动回复信息的插件:代码的力量与智慧!

在信息爆炸的时代,自动回复信息的插件成为了许多用户和管理者的得力助手,这些插件能够根据预设的规则或算法,自动、快速、准确地回复用户的信息,极大地提高了沟通效率和用户体验。 而开发这样一款插件,离不开一系列精…

这三款工具很好用,赶快试试

FileZilla FileZilla是一款免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能。它是一个快速、可信赖的FTP客户端以及服务器端开放源代码程序,具有多种特色和直觉的界面。FileZilla客户端版是一个方便高效的FTP客户端工具…

校企合作,为人才培养注入新动力

树莓集团在校企合作育人方面取得了显著成效,通过共建专业、定制课程、实习实训等多种方式,实现了教育资源的优化配置和高效利用,为高校和企业提供了更多的发展机会和合作空间。 1、共建专业与实验室:树莓集团与高校共同建设数字产…

Transformer教程之Transformer的历史背景

在现代人工智能领域,Transformer模型已经成为一种不可或缺的技术,它在自然语言处理(NLP)和计算机视觉等多个领域取得了巨大的成功。本文将带你回顾Transformer的历史背景,了解它是如何从最初的构想到今天的广泛应用的。…

分享一款永久免费内网穿透工具——巴比达内网穿透

最近在做web项目,想办法将web项目映射到公网进行访问,由于没有固定IP,只能使用内网穿透的方法,于是在网上搜索了一番,只有神卓互联旗下的这款巴比达内网穿透是真正免费的, 其它的要么用不了、要么限制没有流…

springcloud-config 客户端启用服务发现client的情况下使用metadata中的username和password

为了让spring admin 能正确获取到 spring config的actuator的信息,在eureka的metadata中添加了metadata.user.user metadata.user.password eureka.instance.metadata-map.user.name${spring.security.user.name} eureka.instance.metadata-map.user.password${spr…

Dataease配置Nginx代理

Dataease配置Nginx代理 一.修改前端静态资源地址和后端接口地址 **1.**修改应用程序的上下文路径 配置文件地址:backend/src/main/resources 找到文件application-whole.properties,做如下修改: **2.**修改前端静态资源路径和打包配置 配…

产品经理面试指南:四大专栏助你成功上岸

面对产品经理的职位面试,你是否感到有些紧张和迷茫?不用担心,我们为你精心准备了四大面试专栏,包括产品经理专业面试、部门负责人复试、HR面试以及面试技巧,让你在面试过程中如鱼得水,轻松应对。 01 产品经…

ScheduledThreadPoolExecutor和时间轮算法比较

最近项目中需要用到超时操作,对于不是特别优秀的timer和DelayQueue没有看。 Timer 是单线程模式。如果某个 TimerTask 执行时间很久,会影响其他任务的调度。Timer 的任务调度是基于系统绝对时间的,如果系统时间不正确,可能会出现…

视频多功能闪剪助手,智能去重去水印一键剪辑

这款软件具有全平台去水印的功能,无论视频来自哪个平台,无论水印的位置如何变换,它都能轻松去除。同时,它还支持各种去重方法,无论重复内容的形式如何,它都能一一识别并移除,让你的视频内容始终…

干货:ANR日志分析全面解析

ANR类型 出现ANR的一般有以下几种类型: 1:KeyDispatchTimeout(常见) input事件在5S内没有处理完成发生了ANR。 logcat日志关键字:Input event dispatching timed out 2:BroadcastTimeout 前台Broadcast:onReceiver在…

深圳技术大学oj B : 所有不含逆序对的组合数

Description 数组中可能包含重复的数字, 求由这些数字组成的不重复字符串, 且字符串中不包含逆序对。 Input 有若干组测试数据,(1~20之间) 每一组测试数据第一行输入一个整数 n (0 ≤ n ≤ 20)&#xff…

【Micro-ROS学习】

Micro-ROS 是专为 ROS 2 设计的,它允许在微控制器(microcontrollers)上实现ROS 2的功能。Micro-ROS 从 ROS 2 架构优化而来,目的是让那些资源有限的嵌入式设备也能够接入ROS 2生态系统,享受ROS 2带来的标准化通信、模块…

【Redis】三大Redis内存分析工具介绍(Redisinsight、RDR、RMA)

一、RedisInsight工具介绍 RedisInsight是一款Redis官方开源的可视化管理工具,旨在帮助开发人员和管理员更轻松地设计、开发和优化Redis应用程序。以下是关于RedisInsight的详细介绍: 1、工具概述 定义:RedisInsight是一个直观且高效的Red…

MySQL高级-索引-使用规则-覆盖索引回表查询

文章目录 1、覆盖索引1.1、查看索引1.2、删除单列索引 idx_user_pro1.3、查询 profession软件工程 and age31 and status01.4、执行计划 profession软件工程 and age31 and status01.5、执行计划 select id,profession,age,status1.6、执行计划 select id,profession,age,statu…

大数据------JavaWeb------MyBatis(完整知识点汇总)

MyBatis MyBatis简介 定义 它是一款优秀的持久层框架,用于简化JDBC开发它原来是Apache的一个开源项目iBatis,后来改名为MyBatis中文官网:https://mybatis.org/mybatis-3/zh_CN/index.html JaveEE三层架构 表现层(做页面展示&…

AI 开发平台(Coze)搭建《美食推荐官》

前言 本文讲解如何从零开始,使用扣子平台去搭建《美食推荐官》 bot直达:美食推荐官 - 扣子 AI Bot (coze.cn) 欢迎大家体验一下!! 效果 正文 prompt 美食推荐官的首要任务就是推荐美食,基于这个我们要给他一个基…

【图像分类】Yolov8 完整教程 |分类 |计算机视觉

目标:用YOLOV8进行图像分类。 图像分类器。 学习资源:https://www.youtube.com/watch?vZ-65nqxUdl4 努力的小巴掌 记录计算机视觉学习道路上的所思所得。 1、文件结构化 划分数据集:train,val,test 知道怎么划分数据集很重要。 文件夹…