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,因为商品的价格通常不应该为0if new.bprice=0 thenSIGNAL 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 thenSIGNAL 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.rhkb.cn/news/362462.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年6月27日 (周四) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 喜马拉雅下载工具: 字面意思 Steam国产“类8番”游戏《永恒逃脱:暗影城堡》…

多路h265监控录放开发-(14)通过PaintCell自定义日历控件继承QCalendarWidget的XCalendar类

首先创建一个新类XCalendar继承QCalendarWidget类&#xff0c;然后在UI视图设计器中把日历提升为XCalendar&#xff0c;通过这个函数自己设置日历的样式 xcalendar.h #pragma once #include <QCalendarWidget> class XCalendar :public QCalendarWidget { public:XCal…

C#udpClient组播

一、0udpClient 控件&#xff1a; button&#xff08;打开&#xff0c;关闭&#xff0c;发送&#xff09;&#xff0c;textbox&#xff0c;richTextBox 打开UDP&#xff1a; UdpClient udp: namespace _01udpClient {public partial class Form1 : Form{public Form1(){Initi…

最新Adobe2024全家桶下载,PS/PR/AE/AI/AU/LR/ID详细安装教程

如大家所熟悉的&#xff0c;Adobe全家桶系列常用的软件有Photoshop&#xff08;PS&#xff09;、Premiere&#xff08;PR&#xff09;、After Effects&#xff08;AE&#xff09;、illustrator&#xff08;AI&#xff09;、Audition&#xff08;AU&#xff09;、Lightroom&…

计算机视觉-期末复习-简答/名词解释/综合设计

目录 第一讲--计算机/机器视觉概述 名词解释 简答 第二讲--图像处理概述 名词解释 简答 第三讲没划重点习题 第四讲--特征提取与选择 名词解释 简答 综合题 第五讲--不变特征 名词解释 简答 第六讲--物体分类与检测 简答 综合题 第七讲--视觉注意机制 简答 …

操纵系统的特征-线程的六种状态

线程的六种状态 线程是操作系统进行运算调度的最小单位&#xff0c;它可以分为六种状态 新建状态&#xff08;NEW&#xff09; 用new创建一个线程对象&#xff0c;这时候处于新建状态 可运行状态&#xff08;RUNNABLE&#xff09; 可运行状态又分为两种状态&#xff1a;就绪…

公司新来了个半吊子测试,没想到居然是个卷王!

最近招了一个测试坐我旁边&#xff0c;想着好好培养一下&#xff0c;要她有什么不懂可以来问我&#xff0c;但工作几天了也没看她来问问题什么的&#xff0c;以为他是个半吊子测试&#xff0c;结果有一天我发现&#xff0c;她竟然趁我不在的时候偷偷努力…&#xff0c;原来她这…

机器学习之集成学习

一&#xff1a;概念 顾名思义集成学习就是用多个其他的算法结合起来使用 对于“其他算法”有同类和同质的区别&#xff0c;同质指的是所用的算法都是同一类型的&#xff0c;比如决策树和神经网络&#xff0c;这种也叫基学习器。反之亦然&#xff0c;但一般使用的是同质的。 …

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

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

数据库层持久化

数据持久化层 冷热分离 冷热分离&#xff1a;将常用的“热”数据和不常使用的“冷”数据分开存储 冷热分离就是在处理数据时将数据库分成冷库和热库&#xff0c;冷库存放那些走到终态、不常使用的数据&#xff0c;热库存放还需要修改、经常使用的数据 业务需求出现了以下情况…

基于ssh框架的个人博客源码

基于ssh的个人博客源码&#xff0c;页面清爽简洁&#xff0c;原先有部分bug,运行不了&#xff0c;现已修复 1.博客首页 &#xff08;本地访问地址 :localhost:8080/Blog/index/index&#xff09; 2.关于我 3.慢生活 4.留言板 5.我的相册 微信扫码下载源码

【PTA】7-1 网红点打卡攻略(C/C++)代码实现 反思

解题细节分析&#xff1a; 0.比较图的两种存储方法&#xff0c;通过邻接矩阵存储更便于查找给定两点之间的关系 1.注意理解清楚题义&#xff1a;“访问所有网红点”中所有不是指攻略中所有&#xff0c;而是存在的全部的网红点 代码见下&#xff1a;// 需要注明的是&#xff…

M4V文件损坏无法播放?一招轻松修复损坏视频文件!

M4V是一个标准视频文件格式&#xff0c;此种格式常在iPod 、 iPhone 和 PlayStation Portable等设备上使用&#xff0c;同时此格式基于MPEG-4编码第二版&#xff0c;是MP4格式的一种特殊类型&#xff0c;有时可能会因为各种原因而损坏&#xff0c;导致无法正常播放。M4V文件出现…

13 Redis-- MySQL 和 Redis 的数据一致性

Redis-- MySQL 和 Redis 的数据一致性 先抛一下结论&#xff1a;在满足实时性的条件下&#xff0c;不存在两者完全保存一致的方案&#xff0c;只有最终一致性方案。

PID算法介绍以及代码实现过程说明

写在正文之前 在上一篇文章就说会在这两天会基于PID写一个文章&#xff0c;这里的原理部分值得大家都看一下&#xff0c;代码部分的实现是基于python的&#xff0c;但是对于使用其他编程语言的朋友&#xff0c;由于我写的很通俗易懂&#xff0c;所以也值得借鉴。 一、PID算法…

ARM裸机:地址映射

S5PV210的地址映射详解 什么是地址映射&#xff1f; S5PV210属于ARM Cortex-A8架构&#xff0c;32位CPU&#xff0c;CPU设计时就有32根地址线&32根数据线。 32根地址线决定了CPU的地址空间为4G&#xff0c;那么这4G空间如何分配使用&#xff1f;这个问题就是内存映射问题。…

第一后裔The First Descendant官方推荐配置一览

备受玩家期待的免费刷宝游戏第一后裔即将在7月2日上线&#xff0c;玩家可以在游戏中体验不同个性概念和战斗风格的角色&#xff0c;感受The First Descendant世界里酷炫的战斗体验&#xff0c;守护“英格里斯大陆”。很多玩家担心电脑配置不够&#xff0c;游戏上线后无法流畅游…

探索FlowUs息流:个人和团队知识管理稳定解决方案|FlowUs稳定保障你的笔记安全无忧

FlowUs息流&#xff1a;稳定运营保障你的笔记安全无忧 在知识管理工具的选择上&#xff0c;稳定性是用户最关心的问题之一。FlowUs息流以其稳定的运营记录&#xff0c;为用户提供了一个可靠的工作环境。我们深知&#xff0c;一个知识管理平台的稳定性直接影响到团队的生产力和…

Java程序员接单的十条“野路子”,分分钟收入20K!

Java程序员除了主业工作外&#xff0c;也要适当扩展兼职接单这条路。毕竟Java接单可以说是Java程序员进行技术变现的最佳方式之一。 因为Java程序员兼职接单的难度相对更低&#xff0c;单量也比较可观&#xff0c;最重要的是性价比也很顶&#xff0c;且听我一一道来&#xff1a…

springboot 集成阿里云 OSS

引入依赖 <!-- 阿里云oss依赖 --> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.9.1</version> </dependency><?xml version"1.0" encoding"…