数据库-实验八 综合实验


一、实验目的与要求:

利用本学期所学知识,综合运用

二、实验内容:

1.在订单详情表orderitems插入新订单时自动获得水果数量,如果水果数量小于插入的新订单的水果数量,则插入失败。

源码:

CREATE TRIGGER or_insert before INSERT on orderitems FOR EACH ROW
BEGIN 
   DECLARE qquantity int;
   SELECT quantity INTO qquantity FROM fruits
   where fruits.f_id=new.f_id;
   IF qquantity<new.quantity THEN
    signal sqlstate 'HY000' set message_text = '水果数量不足';
   end IF;
END

测试截图:
在这里插入图片描述

2.统计每个月份销量最高的三个水果,方便下次进货的时候多进货。

源码:

SELECT*
FROM
(
select f_id,sum(quantity) 
from orderitems
group by f_id
ORDER BY sum(quantity) DESC)s LIMIT 3

测试效果截图:
在这里插入图片描述

3.随着用户消费增多,修改VIP等级

源码:

CREATE TRIGGER up_VIP AFTER UPDATE on orders FOR EACH ROW
BEGIN 
     DECLARE s_pay DECIMAL(10,2);
     SELECT SUM(original_price) INTO s_pay FROM orders
     WHERE orders.c_id=new.c_id;
     UPDATE customers SET VIP=
     CASE WHEN s_pay BETWEEN 0 AND 100 THEN 0
          WHEN s_pay BETWEEN 100 AND 199 THEN 1
          WHEN s_pay BETWEEN 200 AND 499 THEN 2
          WHEN s_pay BETWEEN 500 AND 999 THEN 3
          WHEN s_pay BETWEEN 1000 AND 1999 THEN 4
          WHEN s_pay>1999 THEN 5
         END
     WHERE customers.c_id=new.c_id;
END

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

三 、实验小结

1.实验中遇到的问题及解决过程
一开始第一题的插入失败这个知识点之前没用过,就不知道要怎么取用。
后来上网查了查发现可以手动抛出异常。后来采用了发现这个方法可以。
在修改vip等级的时候和同学交流,有出现这样一个疑惑,就是在你原来的订单然后你vip升级了,你下第二单订单的时候可以享受优惠,但是你原来的订单取消了,那你的第二单优惠是否也应该取消。我觉得这个问题我就参考了淘宝,淘宝有些津贴活动,比如300-30,尽管你整单购买才能享受这个优惠,但是有人通过在这300元的单子中进行拆单,也可以以少量的价钱获得到这个津贴。所以我这边也只写了在orders的更新操作后进行VIP等级的修改。删除这个就没有写。
2.实验中产生的错误及原因分析
一开始第二题的测试查询,我出现了一个这样的错误
在这里插入图片描述
这个错误是由于
在这里插入图片描述
即 sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误。
所以我就把原来的quantity改成聚合函数的形式即sum(quantity)就可以解决这个问题了。
3.实验体会和收获。
在之前的实验中都是配合着老师的问题来进行实验的,这次实验是自己去发现问题,解决问题,有点不一样。
或许在实际的生活应用中随着业务需求的增加,我们的功能也需要不断地完善。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值