[MySQL]购物管理系统—简略版

本文内容需以MySQL支持

特别感谢baidu comate AI提供的少量虚拟数据

0.建库(建立数据库——utf8字符集,utf8_general_ci排序规则)

1.此项目ER图如下

2.DDL+DML(共九表,27数据)

SET FOREIGN_KEY_CHECKS = 0;DROP TABLE IF EXISTS `goods`;
CREATE TABLE `goods`  (`goods_id` int(11) NOT NULL AUTO_INCREMENT,`create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),`goods_class_id` int(11) NOT NULL,`goods_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`goods_id`) USING BTREE,INDEX `goods_class_id`(`goods_class_id`) USING BTREE,INDEX `goods_name`(`goods_name`) USING BTREE,CONSTRAINT `goods_ibfk_1` FOREIGN KEY (`goods_class_id`) REFERENCES `goods_class` (`goods_class_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `goods_class`;
CREATE TABLE `goods_class`  (`goods_class_id` int(11) NOT NULL AUTO_INCREMENT,`class_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),`base_class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`goods_class_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `goods_info`;
CREATE TABLE `goods_info`  (`goods_info_id` int(11) NOT NULL AUTO_INCREMENT,`goods_id` int(11) NOT NULL,`goods_price` decimal(10, 2) NOT NULL,`create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),`goods_class_id` int(11) NOT NULL,`goods_number` int(11) NOT NULL,PRIMARY KEY (`goods_info_id`) USING BTREE,INDEX `goods_id`(`goods_id`) USING BTREE,INDEX `goods_class_id`(`goods_class_id`) USING BTREE,CONSTRAINT `goods_info_ibfk_1` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `goods_info_ibfk_2` FOREIGN KEY (`goods_class_id`) REFERENCES `goods_class` (`goods_class_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `order`;
CREATE TABLE `order`  (`order_id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),`goods_id` int(11) NOT NULL,`paystatus` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '\'待支付\'',`goodstatus` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '\'待运送\',\'运送中\',\'已送达\'',PRIMARY KEY (`order_id`) USING BTREE,INDEX `user_id`(`user_id`) USING BTREE,INDEX `goods_id`(`goods_id`) USING BTREE,CONSTRAINT `order_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `order_ibfk_2` FOREIGN KEY (`goods_id`) REFERENCES `goods` (`goods_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `order_log`;
CREATE TABLE `order_log`  (`order_log_id` int(11) NOT NULL AUTO_INCREMENT,`order_id` int(11) NOT NULL,`paymode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`number` int(11) NULL DEFAULT NULL,`amount` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`create_time` datetime(0) NULL DEFAULT NULL,PRIMARY KEY (`order_log_id`) USING BTREE,INDEX `order_id`(`order_id`) USING BTREE,CONSTRAINT `order_log_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `order` (`order_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (`user_id` int(11) NOT NULL AUTO_INCREMENT,`user_name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`email` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),PRIMARY KEY (`user_id`) USING BTREE,UNIQUE INDEX `username`(`user_name`) USING BTREE,UNIQUE INDEX `email`(`email`) USING BTREE,UNIQUE INDEX `phone`(`phone`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `user_info`;
CREATE TABLE `user_info`  (`user_info_id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`age` int(3) NULL DEFAULT NULL,`sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '1' COMMENT '1:男 0:女',`id_number` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`true_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`user_info_id`) USING BTREE,INDEX `user_id`(`user_id`) USING BTREE,CONSTRAINT `user_info_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `user_wallet`;
CREATE TABLE `user_wallet`  (`user_wallet_id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`balance` decimal(10, 2) NOT NULL,`create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),PRIMARY KEY (`user_wallet_id`) USING BTREE,INDEX `user_id`(`user_id`) USING BTREE,CONSTRAINT `user_wallet_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;DROP TABLE IF EXISTS `user_wallet_log`;
CREATE TABLE `user_wallet_log`  (`user_wallet_log_id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`payamount` decimal(10, 2) NOT NULL,`user_wallet_id` int(11) NOT NULL,`paymode` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`create_time` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),PRIMARY KEY (`user_wallet_log_id`) USING BTREE,INDEX `user_id`(`user_id`) USING BTREE,INDEX `user_wallet_id`(`user_wallet_id`) USING BTREE,CONSTRAINT `user_wallet_log_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`) ON DELETE RESTRICT ON UPDATE RESTRICT,CONSTRAINT `user_wallet_log_ibfk_2` FOREIGN KEY (`user_wallet_id`) REFERENCES `user_wallet` (`user_wallet_id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `user` VALUES (1, 'Alice', 'password123', 'alice@example.com', '1234567890', '2024-06-27 14:11:28');
INSERT INTO `user` VALUES (2, 'Bob', 'bobpass', 'bob@example.com', '0987654321', '2024-06-27 14:11:28');INSERT INTO `user_info` VALUES (1, 1, 25, '1', '123456789012345678', 'Alice Smith');
INSERT INTO `user_info` VALUES (2, 2, 30, '0', '098765432109876543', 'Bob Johnson');INSERT INTO `user_wallet` VALUES (1, 1, 1000.00, '2024-06-27 14:11:28');
INSERT INTO `user_wallet` VALUES (2, 2, 500.00, '2024-06-27 14:11:28');INSERT INTO `user_wallet_log` VALUES (1, 1, 8999.00, 1, '支付宝', '2024-06-27 14:11:28');
INSERT INTO `user_wallet_log` VALUES (2, 2, 39.90, 2, '微信支付', '2024-06-27 14:11:28');INSERT INTO `goods_class` VALUES (1, '电子产品', '2024-06-27 14:15:22', '0');
INSERT INTO `goods_class` VALUES (2, '生活用品', '2024-06-27 14:15:23', '1');
INSERT INTO `goods_class` VALUES (3, '书籍', '2024-06-27 14:15:25', '1');INSERT INTO `goods` VALUES (1, '2024-06-27 14:11:28', 1, 'iPhone 13');
INSERT INTO `goods` VALUES (2, '2024-06-27 14:11:28', 2, '洗发水');
INSERT INTO `goods` VALUES (3, '2024-06-27 14:11:28', 3, '编程入门');INSERT INTO `goods_info` VALUES (1, 1, 8999.00, '2024-06-27 14:11:28', 1, 100);
INSERT INTO `goods_info` VALUES (2, 2, 39.90, '2024-06-27 14:11:28', 2, 200);
INSERT INTO `goods_info` VALUES (3, 3, 59.90, '2024-06-27 14:11:28', 3, 50);INSERT INTO `order` VALUES (1, 1, '2024-06-27 14:11:28', 1, '待支付', '待运送');
INSERT INTO `order` VALUES (2, 1, '2024-06-27 14:11:28', 2, '已支付', '运送中');
INSERT INTO `order` VALUES (3, 2, '2024-06-27 14:11:28', 3, '已支付', '已送达');INSERT INTO `order_log` VALUES (1, 1, '支付宝', 1, '8999.00', '2024-06-27 14:11:28');
INSERT INTO `order_log` VALUES (2, 2, '微信支付', 1, '39.90', '2024-06-27 14:11:28');
INSERT INTO `order_log` VALUES (3, 3, '银行卡', 1, '59.90', '2024-06-27 14:11:28');-- 查询相关insert-- goods表相关
INSERT INTO `goods` VALUES (4, now(), 1, 'OPPO Reno7 Pro 5G');
INSERT INTO `goods` VALUES (5, now(), 1, 'OPPO Reno7');-- goods_info相关
INSERT INTO `goods_info` VALUES ('4', '4', '4800.00', now(), '1', '50');
INSERT INTO `goods_info` VALUES ('5', '5', '4500.00', now(), '1', '50');

3.相关查询

-- 查询'已支付'订单
select * from `order` where `order`.paystatus='已支付'; -- 查询用户完全信息
select `user`.*,
`user_info`.age,`user_info`.sex,`user_info`.id_number,`user_info`.true_name 
from `user` join `user_info` 
on `user`.user_id=`user_info`.user_id;-- 模糊查询相似商品(走索引)
select * from `goods` where `goods`.goods_name like 'OPPO%';

4.触发器建立

-- 加入用户钱包
delimiter $$
create trigger insert_user_wallet
after insert on `user`
for each row
begininsert into `user_wallet` (user_id,balance,create_time) values (new.user_id,0.00,now());
end;
$$
delimiter ;

测试用相关插入语句

INSERT INTO `user` VALUES (3, 'season', '20050918season', 'season@secondworld.com', '2002020213', now());
-- 删除所有用户信息(慎用,慎用,慎用)
create trigger delete_user_all
before delete on `user`
for each row
begindelete from `user_info` where user_id=old.user_id;delete from `user_wallet` where user_id=old.user_id;delete from `user_wallet_log` where user_id=old.user_id;delete from `order` where user_id=old.user_id;
end;

5.订单建立(存储过程)


create procedure create_order(
in in_user_id int,
in in_goods_id int,
in in_count_id int
)
BEGIN
-- 设局部变量+declare in_goods_number int;declare in_goods_price decimal(10,2);declare final_price decimal(10,2);declare in_user_balance decimal(10,2);declare in_user_wallet_id int;declare in_order_id int;
-- 检测是否有库存select goods_number into in_goods_number from goods_info where goods_id=in_goods_id;if in_count_id>in_goods_number thensignal sqlstate '45000' set message_text='商品库存不足。';end if;
-- 计算商品总价select goods_price into in_goods_price from goods_info where goods_id=in_goods_id;set final_price=in_goods_price*in_count_id;
-- 检测账户余额select balance into in_user_balance from user_wallet where user_id=in_user_id;if in_user_balance<final_price thensignal sqlstate '45000' set message_text='账户余额不足。';end if;
-- 进行相关表的修改start transaction;insert into `order` (user_id,create_time,goods_id,paystatus,goodstatus) values (in_user_id,now(),in_goods_id,'待支付','未运送');  -- order相关set in_order_id=LAST_INSERT_ID();insert into `order_log` (order_id,paymode,number,amount,create_time) values (in_order_id,'none',in_goods_number,final_price,now());  -- order_log相关update goods_info set goods_number=goods_number-in_count_id where goods_id=in_goods_id;  -- goods_info相关update user_wallet set balance=balance-final_price where user_id=in_user_id;  -- user_wallet相关select user_wallet_id into in_user_wallet_id from user_wallet where user_id=in_user_id;insert into user_wallet_log (user_id,user_wallet_id,payamount,paymode,create_time)values(in_user_id,in_user_wallet_id,final_price,'none',now());  -- user_wallet_log相关commit;
END;
-- 使用此语句调用[记得替换'()'中的参数]
call create_order('用户_id','商品_id','购买数量');

——想法很多,思路很好,但人类的力量是有极限的。(无名著)

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

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

相关文章

前端vue-cli相关知识与搭建过程(项目创建,组件路由)very 详细

一.关于vue-cli 1.什么是vue Vue (读音 /vju ː /&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。 Vue.js 是前端的主流框架之一&#xff0c;和 Angular.js…

【公开数据集获取】

Open Images Dataset https://www.youtube.com/watch?vdLSFX6Jq-F0

【M365运维】Outlook和Teams里不显示用户的组织架构

【问题】 由于一些误操作&#xff0c;把用户账户禁用并重新启用后&#xff0c;发现在Outlook和Teams里无法查看用户的组织结构图了。如下图所示&#xff1a; - 在Outlook 里&#xff0c;用户标签页的组织一直显示“正在加载..."&#xff0c;成员身份也是“找不到任何组。…

【GD32】08 - IIC(以SHT20为例)

GD32中的IIC 今天来了解一下GD32中的硬件IIC&#xff0c;其实我个人是觉得软件IIC比较方便的&#xff0c;不过之前文章里用的都是软件IIC&#xff0c;今天就算是走出自己的舒适圈&#xff0c;我们来了解了解GD32中的硬件IIC。 我这里用的型号是GD32F407&#xff0c;不同型号的…

等保测评初级简答题试题

基本要求&#xff0c;在应用安全层面的访问控制要求中&#xff0c;三级系统较二级系统增加的措施有哪些&#xff1f; 答&#xff1a;三级比二级增加的要求项有&#xff1a; 应提供对重要信息资源设置敏感标记的功能&#xff1b; 应按照安全策略严格控制用户对有敏感标记重要…

策略模式和状态模式

策略模式 在上下文中携带策略接口作为成员变量&#xff0c;在使用上下文之前需要设置策略setStrategy&#xff08;&#xff09;&#xff0c;然后使用策略接口成员变量来进行策略的执行。 步骤1&#xff1a;定义策略接口 // 策略接口 public interface Strategy {int execut…

干涉阵型成图参数记录【robust】

robust 这个玩意经常忘记&#xff0c;就是取2的时候是更加显示大尺度的结构&#xff0c;取-2更加显示小尺度结果&#xff0c;一般取0就是正常就好了

【Hive中常见的优化手段----数据采集!Join 优化!Hive索引!数据倾斜!mapreduce本地模式!map和reduce数量调整!】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;我是书生♡&#xff0c;今天主要和大家分享一下Hive中常见的优化手段----数据采集&#xff01;常见的Join 优化有哪几种&#xff01;什么是Hive索引&#xff01;数据怎么发生倾斜&#xff01;什么是mapreduce的本…

力扣每日一题 6/24 模拟 数组 单调栈

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 503.下一个更大元素II 【中等】 题目&#xff1a; 给定一个循环数组 nums…

使用原子子表创建可重用的子组件

原子子表是一个图形对象&#xff0c;可帮助您在Stateflow图表中创建独立的子部件。原子子表允许&#xff1a; 对具有多个状态或层次结构的图表进行微小更改后&#xff0c;模拟速度更快。 在多个图表和模型中重复使用相同的状态或子表。 易于团队开发&#xff0c;适用于在同一图…

Python网络爬虫实战6—下一页,模拟用户点击,切换窗口

【前期提要】感兴趣的可以看看往期文章哈~ Python网络爬虫5-实战网页爬取 Python网络爬虫4-实战爬取pdf Pyhon网络爬虫3-模拟用户点击 Python网络爬虫实战2-下载url下的pdf Python网络爬虫基础1 1.需求背景 针对长虹美菱电器说明书网页形式&#xff0c;编写爬虫代码&#xff…

【财务数字化转型之底座】集团企业财务数据中台系统建设方案

引言&#xff1a;随着企业规模的不断扩大和业务的复杂化&#xff0c;传统的财务管理模式已难以满足集团企业的数据整合、分析和决策需求。因此&#xff0c;建设一个高效、稳定、安全的财务数据中台系统&#xff0c;成为集团企业数字化转型的重要一环。本方案旨在构建一个集数据…

算力服务先锋!和鲸科技入选《2024中国智算产业生态图谱》

2024 年 6 月 18 日&#xff0c;由科智咨询发起的《2024中国智算产业生态图谱》正式发布&#xff0c;依托 ModelWhale 构建的智算算力资源服务&#xff0c;以及深耕多年的 ModelWhale 数据科学协同平台优势&#xff0c;和鲸科技成功入选。 “智算时代”技术不断进步&#xff0c…

指针并不是用来存储数据的,而是用来存储数据在内存中地址(内存操作/函数指针/指针函数)

推荐&#xff1a;1、4、5号书籍 1. 基本概念 首先&#xff0c;让小明了解指针的基本概念&#xff1a; 指针的定义&#xff1a;指针是一个变量&#xff0c;它存储的是另一个变量的地址。指针的声明&#xff1a;例如&#xff0c;int *p表示一个指向整数的指针变量p。 2. 形象…

生命在于学习——Python人工智能原理(2.6.1)

六 Python的文件系统 6.1 打开文件 在Python中&#xff0c;可以使用内置的open函数来打开文件&#xff0c;open函数的基本语法如下&#xff1a; file open(file_name, moder, buffering-1, encodingNone, errorsNone, newlineNone, closefdTrue, openerNone)参数说明&#…

【Web3】Web3.js 启动!并解决Web3 is not a constructor报错

苏泽 大家好 这里是苏泽 一个钟爱区块链技术的后端开发者 本篇专栏 ←持续记录本人自学智能合约学习笔记和经验总结 如果喜欢拜托三连支持~ 本节教大家如何启动Web3.js 目录 Web3 启动&#xff01; 于是很愉快的报错 创建实例&#xff01; 出来了 Web3&#xff1a;模块…

《PIDNet: A Real-time Semantic Segmentation Network Inspired by PID Controllers》

期刊&#xff1a;CVPR 年份&#xff1a;2023 代码&#xff1a;https://github.com/XuJiacong/PIDNet 摘要 双分支网络架构已经证明了它在实时语义分割任务中的有效性和有效性。然而&#xff0c;高分辨率细节和低频上下文的直接融合的缺点是细节特征很容易被周围的上下文信息…

快储存,分布式文件系统,对象储存

Ceph块存储 镜像快照 快照可以保存某一时间点时的状态数据快照是映像在特定时间点的只读逻辑副本希望回到以前的一个状态&#xff0c;可以恢复快照使用镜像、快照综合示例 rbd create img1 --size 10G 创建镜像rbd ls 查看镜像 rbd info img1 #查看…

Win32消息机制原理及消息运转

一.消息机制原理 1.消息类型&#xff1a; WIndows定义的一系列WM_XXX开头的&#xff0c;用来表示键盘按键&#xff0c;鼠标点击&#xff0c;窗口变化&#xff0c;用户自定义等各种消息; 2.消息队列&#xff1a; Windows为每一个正在运行的程序维护一个消息队列应用程序的消…

让DroidVNC-NG支持中文输入

DroidVNC-NG支持控制端输入内容&#xff0c;但是仅支持英文字符&#xff0c;如果需要控制输入法软键盘输入中文的话就没办法了&#xff0c;经过摸索找到了解决办法。 这个解决办法有个条件就是让DroidVNC-NG成为系统级应用&#xff08;这个条件比较苛刻&#xff09;&#xff…