存储过程触发器习题整理1

在这里插入图片描述
46、{blank}设有商品表(商品号,商品名,单价)和销售表(销售单据号,商品号,销售时间,销售数量,销售单价)。其中,商品号代表一类商品,商品号、单价、销售数量和销售单价均为整型。请编写查询某年某商品的销售总毛利的存储过程,毛利=销售数量x(销售单价-单价)。要求商品号和年份为输入参数总手利用输出参数返回,

CREATE TABLE 商品表 (商品号 INT PRIMARY KEY AUTO_INCREMENT, 商品名 VARCHAR(100) NOT NULL UNIQUE, 单价 INT NOT NULL);CREATE TABLE 销售表 (销售单据号 INT PRIMARY KEY AUTO_INCREMENT,商品号 INT NOT NULL,销售时间 DATE NOT NULL,销售数量 INT NOT NULL,销售单价 INT NOT NULL,FOREIGN KEY (商品号) REFERENCES 商品表(商品号)
);
INSERT INTO 商品表 (商品名, 单价) VALUES('手机',2000),
('电脑',5000), ('耳机',500);
INSERT INTO 销售表 (商品号, 销售时间, 销售数量, 销售单价) VALUES(1, '2023-01-01',10,2200),(1, '2023-02-01',15,2300),(2, '2023-03-01',5,5500),(3, '2023-04-01',20,600),(1, '2024-01-01',8,2100);DELIMITER
$$ CREATE PROCEDURE 计算销售总毛利 (
IN 商品号 INT, IN 年份 INT, OUT 总毛利 INT)
BEGIN -- 声明变量
DECLARE 毛利 INT DEFAULT 0;
-- 查询符合条件的销售记录
SELECT SUM(销售数量 * (销售单价 - 单价)) INTO 毛利
FROM 销售表 sJOIN 商品表 c ON s.商品号 = c.商品号
WHERE s.商品号 = 商品号 AND YEAR(s.销售时间) = 年份;
-- 将结果赋值给输出参数
SET 总毛利 = 毛利;
END
$$ DELIMITER ;CALL 计算销售总毛利(1,2023,@总毛利);
SELECT @总毛利;

在这里插入图片描述

46、mysql 设某数据库中有商品表(商品号,商品名,进货价格),商品号为主码;销售表(商品号,销售时间,销售数量,销售价格,本次利润),商品号和销售时间为主码,销售价格为本次销售商品的单价。现要求每当在销售表中插入前4列数据时(假设一次只插入一行数据),系统自动计算本次销售产生的利润,并将该利润赋给销售表的第5列"本次利润"。请编写实现上述功能的后触发型触发器代码。 建表名属性名用英文,造几条数据,写存储过程

以下是实现自动计算销售利润的MySQL触发器及建表语句、示例数据和存储过程的完整代码:

一、建表语句

-- 创建商品表
CREATE TABLE product (product_id VARCHAR(10) PRIMARY KEY,product_name VARCHAR(50),purchase_price DECIMAL(10,2)
);-- 创建销售表
CREATE TABLE sales (product_id VARCHAR(10),sale_time DATETIME,quantity INT,sale_price DECIMAL(10,2),profit DECIMAL(10,2),PRIMARY KEY (product_id, sale_time),FOREIGN KEY (product_id) REFERENCES product(product_id)
);

二、触发器实现

DELIMITER //
CREATE TRIGGER calculate_profit_trigger
BEFORE INSERT ON sales
FOR EACH ROW
BEGINDECLARE v_purchase_price DECIMAL(10,2);-- 获取商品进货价格SELECT purchase_price INTO v_purchase_price FROM product WHERE product_id = NEW.product_id;-- 计算利润并赋值SET NEW.profit = (NEW.sale_price - v_purchase_price) * NEW.quantity;
END //
DELIMITER ;

关键说明

  1. 使用BEFORE INSERT触发器在插入前计算利润,直接修改NEW.profit
  2. 通过SELECT...INTO从商品表关联获取进货价格
  3. 利润计算公式:(销售单价 - 进货单价) × 销售数量

三、存储过程

DELIMITER //
CREATE PROCEDURE InsertSaleRecord(IN p_product_id VARCHAR(10),IN p_sale_time DATETIME,IN p_quantity INT,IN p_sale_price DECIMAL(10,2)
)
BEGININSERT INTO sales (product_id, sale_time, quantity, sale_price)VALUES (p_product_id, p_sale_time, p_quantity, p_sale_price);
END //
DELIMITER ;

四、示例数据

-- 插入商品数据
INSERT INTO product (product_id, product_name, purchase_price) VALUES
('P001', 'Laptop', 500.00),
('P002', 'Phone', 300.00),
('P003', 'Tablet', 200.00);-- 通过存储过程插入销售记录
CALL InsertSaleRecord('P001', '2025-03-22 09:00:00', 2, 600.00);
CALL InsertSaleRecord('P002', '2025-03-22 10:30:00', 3, 400.00);

五、验证结果

执行以下查询验证自动计算的利润:

SELECT * FROM sales;

预期输出

product_idsale_timequantitysale_priceprofit
P0012025-03-22 09:00:002600.00200.00
P0022025-03-22 10:30:003400.00300.00

六、注意事项

  1. 需要确保商品表中已存在对应商品记录,否则触发器会因找不到进货价格而报错
  2. 销售时间需精确到秒以避免主键冲突
  3. 若需要处理批量插入,需调整触发器逻辑(当前设计支持单行插入)

以上方案通过触发器自动完成利润计算,保证数据一致性的同时减少人工干预,符合数据库设计规范。

由小艺AI生成<xiaoyi.huawei.com>

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

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

相关文章

基于ChatGPT、GIS与Python机器学习的地质灾害风险评估、易发性分析、信息化建库及灾后重建高级实践

第一章、ChatGPT、DeepSeek大语言模型提示词与地质灾害基础及平台介绍【基础实践篇】 1、什么是大模型&#xff1f; 大模型&#xff08;Large Language Model, LLM&#xff09;是一种基于深度学习技术的大规模自然语言处理模型。 代表性大模型&#xff1a;GPT-4、BERT、T5、Ch…

单表达式倒计时工具:datetime的极度优雅(智普清言)

一个简单表达式&#xff0c;也可以优雅自成工具。 笔记模板由python脚本于2025-03-22 20:25:49创建&#xff0c;本篇笔记适合任意喜欢学习的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&#xff0c;而不仅仅是知识的简单复述。 Pyth…

最优编码树的双子性

现在看一些书&#xff0c;不太愿意在书上面做一些标记&#xff0c;也没啥特殊的原因。。哈哈。 树的定义 无环连通图&#xff0c;极小连通图&#xff0c;极大无环图。 度 某个节点&#xff0c;描述它的度&#xff0c;一般默认是出度&#xff0c;分叉的边的条数。或者说孩子…

MiB和MB

本文来自腾讯元宝 MiB 和 ​MB 有区别&#xff0c;尽管它们都用于表示数据存储的单位&#xff0c;但它们的计算方式不同&#xff0c;分别基于不同的进制系统。 1. ​MiB&#xff08;Mebibyte&#xff09;​ ​MiB 是基于二进制的单位&#xff0c;使用1024作为基数。1 MiB 102…

Labview和C#调用KNX API 相关东西

叙述:完全没有听说过KNX这个协议...................我这次项目中也是简单的用了一下没有过多的去研究 C#调用示例工程链接(labview调用示例在 DEBUG文件夹里面) 通过网盘分享的文件&#xff1a;KNX调用示例.zip 链接: https://pan.baidu.com/s/1NQUEYM11HID0M4ksetrTyg?pwd…

损失函数理解(二)——交叉熵损失

损失函数的目的是为了定量描述不同模型&#xff08;例如神经网络模型和人脑模型&#xff09;的差异。 交叉熵&#xff0c;顾名思义&#xff0c;与熵有关&#xff0c;先把模型换成熵这么一个数值&#xff0c;然后用这个数值比较不同模型之间的差异。 为什么要做这一步转换&…

Kubernetes的Replica Set和ReplicaController有什么区别

ReplicaSet 和 ReplicationController 是 Kubernetes 中用于管理应用程序副本的两种资源&#xff0c;它们有类似的功能&#xff0c;但 ReplicaSet 是 ReplicationController 的增强版本。 以下是它们的主要区别&#xff1a; 1. 功能的演进 ReplicationController 是 Kubernete…

信息系统运行管理员教程3--信息系统设施运维

第3章 信息系统设施运维 信息系统设施是支撑信息系统业务活动的信息系统软硬件资产及环境。 第1节 信息系统设施运维的管理体系 信息系统设施运维的范围包含信息系统涉及的所有设备及环境&#xff0c;主要包括基础环境、硬件设备、网络设备、基础软件等。 信息系统设施运维…

如何通过Python实现自动化任务:从入门到实践

在当今快节奏的数字化时代,自动化技术正逐渐成为提高工作效率的利器。无论是处理重复性任务,还是管理复杂的工作流程,自动化都能为我们节省大量时间和精力。本文将以Python为例,带你从零开始学习如何实现自动化任务,并通过一个实际案例展示其强大功能。 一、为什么选择Pyt…

Spring Boot 与 MyBatis Plus 整合 KWDB 实现 JDBC 数据访问

​ 引言 本文主要介绍如何在 IDEA 中搭建一个使用 Maven 管理的 Spring Boot 应用项目工程&#xff0c;并结合在本地搭建的 KWDB 数据库&#xff08;版本为&#xff1a;2.0.3&#xff09;来演示 Spring Boot 与 MyBatis Plus 的集成&#xff0c;以及对 KWDB 数据库的数据操作…

Java锁等待唤醒机制

在 Java 并发编程中&#xff0c;锁的等待和唤醒机制至关重要&#xff0c;通常使用 wait()、notify() 和 notifyAll() 来实现线程间的协调。本文将详细介绍这些方法的用法&#xff0c;并通过示例代码加以说明。 1. wait()、notify() 与 notifyAll() 在 Java 中&#xff0c;Obj…

 UNIX网络编程笔记:TCP客户/服务器程序示例

服务器实例 有个著名的项目&#xff0c;tiny web&#xff0c;本项目将其改到windows下&#xff0c;并使用RAII重构&#xff0c;编写过程中对于内存泄漏确实很头疼&#xff0c;还没写完&#xff0c;后面会继续更&#xff1a; #include <iostream> #include <vector&g…

AI Agent开发大全第四课-提示语工程:从简单命令到AI对话的“魔法”公式

什么是提示语工程&#xff1f;一个让AI“听话”的秘密 如果你曾经尝试过用ChatGPT或者其他大语言模型完成任务&#xff0c;那么你一定遇到过这样的情况&#xff1a;明明你的问题是清晰的&#xff0c;但答案却离题万里&#xff1b;或者你认为自己提供的信息足够详尽&#xff0c…

系统架构设计知识体系总结

1.技术选型 1.什么是技术选型&#xff1f; 技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解…

基于3DMax与Vray引擎的轻量级室内场景渲染实践

欢迎踏入3DMAX室内渲染的沉浸式学习之旅!在这个精心设计的实战教程中,我们将携手揭开3DMAX与Vray这对黄金搭档在打造现实室内场景时的核心奥秘。无论您是渴望入门的3D新手,还是追求极致效果的专业设计师,这里都将为您呈现从场景蓝图构建到光影魔法施加的完整技术图谱。我们…

逻辑卷,vdo,(阿里加速器)

一、逻辑卷 10 20 30 1.逻辑卷的2个特点 &#xff08;1&#xff09;逻辑卷可以将多个分区或者磁盘整合成一个更大的逻辑磁盘&#xff0c;然后可以从逻辑磁盘上划分出分区&#xff08;逻辑磁盘的大小等于整合的物理磁盘大小之和。&#xff09; &#xff08;2&#xff09;能…

检索增强生成(2)本地PDF 本地嵌入模型

from langchain_community.document_loaders import PyPDFLoader from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在&#xff01;")loader PyPDFLoader(file_path)try:do…

安全守护:反光衣检测技术的革新之路

视觉分析助力船上工人反光衣检测 在现代工业生产与作业环境中&#xff0c;安全始终是首要考虑的因素。对于水上作业&#xff0c;如船舶维护、海上施工等场景&#xff0c;工人穿戴反光衣是预防事故、提高可见性的重要措施。然而&#xff0c;传统的人工检查方式不仅效率低下&…

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…

Centos6配置yum源

Centos6配置yum源 为Centos6配置CentOS Vault源—防止yum源过期为Centos6配置epel源为Centos6配置ELRepo源---已ELRepo被官方清空Centos6安装dockerdocker配置国内镜像加速 为Centos6配置CentOS Vault源—防止yum源过期 参考&#xff1a;https://mirrors.ustc.edu.cn/help/cen…