存儲過程觸發器習題整理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.pswp.cn/bicheng/74214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/74214.shtml
英文地址,請注明出處:http://en.pswp.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…