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.mzph.cn/news/862004.shtml

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

相关文章

C++中int、DWORD和QWORD

当谈论C编程语言时,以下术语经常被提及:int、DWORD和QWORD。它们是用于表示不同数据类型和长度的关键字。以下是它们的详细解释以及举例说明: int: int是C中表示整数的数据类型之一。它通常用于存储有符号的整数值。int的长度在不…

DLS策略洞察:如何应对AI数据中心网络交换机市场的爆发式增长?

摘要: 随着AI技术的发展和应用,AI数据中心对网络交换机的需求日益增加。摩根士丹利预计,2023-2026年间,AI数据中心网络交换机的收入复合年增长率(CAGR)将达到55%。本文将详细分析AI数据中心网络交换机市场…

C#udpClient组播

一、0udpClient 控件: button(打开,关闭,发送),textbox,richTextBox 打开UDP: UdpClient udp: namespace _01udpClient {public partial class Form1 : Form{public Form1(){Initi…

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

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

“所得”如何超越“所见”?合合信息扫描全能王发布扫描“黑科技”

数字化时代,扫描工具正变得越来越智能和个性化。除了常规的文件扫描外,无论是在工作中,还是在旅途里,人们也经常会使用手机扫描褶皱、脏污的文件,或是旅行交通地图、博物馆展品介绍等,打造独属于自己的随身…

基于SpringBoot和PostGIS的某国基地可视化实战

目录 前言 一、Java后台开发设计与实现 1、模型层实现 2、控制层设计 二、WebGIS界面实现 1、列表界面的定义 2、全球基地可视化 三、成果展示 1、全球部署情况 2、亚太地区 3、欧洲基地分布 4、中东的部署 四、总结 前言 在之前的博客中,我们曾经对漂亮…

ROS1通信机制——以topic为例

ROS1 的通信机制 ROS1是一个分布式框架,为用户提供多节点(进程)之间的通信服务。 ROS1通信时有一个中心节点(ROS Master),进行信息匹配等工作。 ROS1 的话题通信机制 通信链接:XML/RPC 信息传…

JavaScript中的Date对象,以及常用格式化日期的方法封装

一、Date对象 二、操作Date对象 1、创建Date对象 (1)常用方法 (2)使用示例 2、获取日期 (1)常用方法 (2)使用示例 3、设置日期 (1)常用方法 &…

Bitmap位图数据排列方式

读取dicom C# 使用fo-dicom操作dicom文件-CSDN博客 创建位图 通过读取dicom得到像素内存,本例单指彩色图像。 Bitmap dataBmp new Bitmap(imageWidth, imageHeight, stride, PixelFormat.Format24bppRgb, dstBmp); 当像素的内存按照RGB的排列模式时&#xff0c…

深入解析:npm cache clean --force命令的威力与智慧

深入解析:npm cache clean --force命令的威力与智慧 在JavaScript开发的世界中,npm作为Node.js的包管理器,扮演着至关重要的角色。然而,随着项目的不断迭代和依赖的增多,npm的缓存可能会变得混乱,甚至引发…

【人生感悟】记录一些过来人的感悟

不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。我只能送你到这里,剩下的路你要自己走,不要回头。你不能等待别人来安排你的人生,自己想要的,自己争取。生命可…

08 - matlab m_map地学绘图工具基础函数 - 绘制线、图例、添加文字注释等函数

08 - matlab m_map地学绘图工具基础函数 - 绘制线、图例、添加文字注释等函数 0. 引言1. 关于m_line2. 关于m_quiver3. 关于m_text4. 关于m_plot5. 结语 0. 引言 本篇介绍下m_map中添加绘制基础线(m_line、m_plot)、绘制箭头(m_quiver&#x…

鸿蒙开发Ability Kit(程序框架服务):【ServiceAbility切换】 组件切换

ServiceAbility切换 FA模型中的ServiceAbility对应Stage模型中的ServiceExtensionAbility。Stage模型下的ServiceExtensionAbility为系统API,只有系统应用才可以创建。因此,FA模型的ServiceAbility的切换,对于系统应用和三方应用策略有所不同…

链路追踪详解(五):链路传播 Header 详解

链路追踪作为分布式系统中不可或缺的一部分,可以帮助开发和运维人员了解请求在系统中的流转链路,快速定位问题和识别性能瓶颈。而链路传播 Header 是实现跨服务调用链跟踪的关键机制,通过链路传播 Header,使得跟踪信息在不同服务间…

利用Python控制终端打印字体的颜色和格式

利用Python控制终端打印字体的颜色和格式—操作详解(ANSI转义序列) 一、问题描述二、ANSI转义序列三、具体代码和显示效果(看懂这段代码,以后可随心控制字体的打印格式) 欢迎学习交流! 邮箱: z……

驾驭Vim的扩展宇宙:插件管理器全攻略

驾驭Vim的扩展宇宙:插件管理器全攻略 在Vim的世界里,插件是扩展编辑器功能、提升开发效率的神器。Vim-plug和Vundle是两款流行的Vim插件管理器,它们使得安装、更新和管理插件变得前所未有的简单。本文将带你深入了解Vim插件管理器的使用&…

单片机+DS18B20温度控制程序仿真与原理图PCB文件 可设上下限

资料下载地址:单片机DS18B20温度控制程序仿真与原理图PCB文件 可设上下限 目录 1、项目介绍 2、实物图 ​3、电路原理图 ​4、仿真原理图 ​5、部分代码 1、项目介绍 基于51单片机温度控制,使用18b20来做温度传感器,四位共阳数码管显…

【消息队列】Kafka学习笔记

概述 定义 传统定义: 一个分布式的, 基于发布订阅模式的消息队列, 主要应用于大数据实时处理领域新定义: 开源的分布式事件流平台, 被用于数据管道/流分析/数据集成 消息队列的使用场景 传统消息队列的主要应用场景包括: 削峰: 解耦: 异步: 两种模式 点对点模式 发布/订…

【深度学习】python之人工智能应用篇——图像生成技术(一)

说明: 两篇文章根据应用场景代码示例区分,其他内容相同。 图像生成技术(一):包含游戏角色项目实例代码、图像编辑和修复任务的示例代码和图像分类的Python代码示例 图像生成技术(二)&#xff1a…

SaaS产品运营:维护四个不同类型的合作伙伴的实战指南

在SaaS(软件即服务)行业的竞争中,与合作伙伴建立并维护良好关系至关重要。不同类型的合作伙伴对于产品的推广、市场覆盖和用户增长都起着不同的作用。如何有效维护这四种类型合作伙伴?看个案例一起学习吧。 一、合作伙伴的四种类型…