数据库实验七:综合实验-水果商店进阶二

一、实验目的

综合运用SQL语言相关知识如变量、游标、函数、触发器等解决实际问题。

二、实验内容

设计并完成以下实验,要求附上源码,测试效果截图。

1.在客户表customers中添加“VIP”字段

在客户表customers中添加“VIP”字段,默认值0,根据已购买的累计金额自动更新等级,如累计100-199一星VIP折扣9.9,200-299二星VIP折扣9.7,500-999三星VIP折扣9.5,1000-1999四星VIP折扣9,之后的8.5折。

①根据已购买情况自动修改客户表中所有客户的VIP信息

源码:

ALTER TABLE customers ADD VIP INT NOT NULL DEFAULT(0);

#游标
CREATE PROCEDURE c_vip()
BEGIN
	DECLARE vip_price DECIMAL(6,2);
	DECLARE vip_id INT(10);
	DECLARE done TINYINT DEFAULT 0;
	DECLARE c_vip CURSOR FOR SELECT c_id,SUM(original_price) FROM orders GROUP BY c_id;
	DECLARE CONTINUE HANDLER FOR NOT found SET done=1;
	
OPEN c_vip;
read_loop:LOOP
	FETCH c_vip INTO vip_id,vip_price;
	IF done THEN
		LEAVE read_loop;
	END IF;
	UPDATE customers SET VIP=CASE
		WHEN vip_price BETWEEN 0 AND 100 
			THEN 0
		WHEN vip_price BETWEEN 100 AND 199 
			THEN 1
		WHEN vip_price BETWEEN 200 AND 499 
			THEN 2
		WHEN vip_price BETWEEN 500 AND 999 
			THEN 3
		WHEN vip_price BETWEEN 1000 AND 1999 
			THEN 4
		WHEN vip_price > 1999 
			THEN 5
		END
		WHERE c_id=vip_id;
	
	END LOOP read_loop;

CLOSE c_vip;
END

运行测试结果截图:
在这里插入图片描述

②在订单表orders中插入新订单时自动计算并插入当前客户的折扣信息(不修改原订单的折扣)

源码:

CREATE TRIGGER discount_vip BEFORE INSERT ON orders FOR EACH ROW 
	BEGIN
		DECLARE re_vip INT(10);
		SET re_vip=(SELECT VIP FROM customers WHERE c_id=new.c_id);
		SET new.discount=(CASE 
			WHEN re_vip=0 THEN 1
			WHEN re_vip=1 THEN 0.99
			WHEN re_vip=2 THEN 0.97
			WHEN re_vip=3 THEN 0.95
			WHEN re_vip=4 THEN 0.9
			WHEN re_vip=5 THEN 0.85
     END);
END;

运行测试结果截图:

插入“30009”一行:
在这里插入图片描述
在这里插入图片描述

2.查询指定客户的“总优惠金额”,即累计每次购买时为客户优惠金额

源码:SELECT SUM(original_price-pay) "总优惠金额" FROM orders WHERE c_id = 10001;
运行测试结果截图:
在这里插入图片描述

3.f_id中t字母开头的是特价产品,限制每一位客户每次够买特价产品不能超过50元

源码:

CREATE TRIGGER t_fruits BEFORE INSERT ON orderitems FOR EACH ROW 
	BEGIN
		DECLARE t_price DECIMAL(8,2);
		DECLARE t_fruits CURSOR FOR SELECT new.quantity*new.item_price FROM orderitems WHERE new.f_id LIKE 't%';
		
		OPEN t_fruits;
		FETCH t_fruits INTO t_price;
		IF
			t_price > 50
		THEN
			SIGNAL SQLSTATE 'HY000' SET message_text='购买特价商品不得超过50元!';
		END IF;
		
		CLOSE t_fruits;
	END

运行测试(购买正常及错误的)结果截图:
正常:
在这里插入图片描述
错误:
在这里插入图片描述

三、实验小结

1.实验中遇到的问题及解决过程

第一题中设计游标时报错:
在这里插入图片描述
原因是在更新等级的循环后面少了一次“end”:
在这里插入图片描述

2.实验中产生的错误及原因分析

产生错误:添加完触发器后增加记录时报错
在这里插入图片描述
原因分析:
查找字符’t’忘记在其后加上“%”
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
数据库应用系统开发是数据库专题训练实验中的一种,它是通过对数据库理论知识的学习和实际项目开发的实践,来帮助学生掌握数据库应用系统的设计和开发技术。 在数据库应用系统开发的实验中,学生需要根据实际需求,设计并开发一个完整的数据库应用系统。这个过程包括以下步骤: 1. 需求分析:确定数据库应用系统的功能需求,包括数据的输入、输出、存储和处理等方面。 2. 概念设计:根据需求分析结果,设计出数据库应用系统的概念模型,包括实体、属性、关系等。 3. 逻辑设计:根据概念模型,设计出数据库的逻辑结构,包括表的结构、属性、关系等。 4. 物理设计:根据逻辑结构,设计出数据库的物理结构,包括表的存储方式、索引、约束等。 5. 实现与测试:根据物理结构,实现数据库应用系统,并进行测试和调试。 6. 系统维护:对数据库应用系统进行维护和更新,保证系统的稳定性和可靠性。 在实验过程中,学生需要掌握数据库应用系统开发的相关技术,包括关系数据库管理系统(RDBMS)的使用、SQL语言的编写、数据库设计的基本原则和规范等。 通过数据库应用系统开发的实验,学生能够掌握数据库应用系统的设计和开发技术,提高实际项目开发的能力和水平,为未来的职业发展打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Moonee_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值