0

0

mysql在餐饮管理系统中的订单与菜品数据存储

P粉602998670

P粉602998670

发布时间:2026-01-18 08:15:08

|

385人浏览过

|

来源于php中文网

原创

推荐用 orders——简洁通用、ORM友好;order_master冗余且与order_items不对称;status用TINYINT或ENUM;created_at/updated_at必存;customer_id可NULL;order_items需拆分规格;menus与menu_categories应分表管理;库存扣减须SELECT...FOR UPDATE行锁。

mysql在餐饮管理系统中的订单与菜品数据存储

订单主表用 orders 还是 order_master?别用 order

MySQL 里 order 是保留字(ORDER BY),直接建表会报错 ERROR 1064 (42000)。实际项目中见过三次因这命名导致初始化失败。推荐用 orders——简洁、通用、ORM 友好;order_master 虽语义清晰,但冗余,且和关联表 order_items 不对称。

字段设计要预留扩展: - statusTINYINTENUM('pending','confirmed','canceled','completed'),别用字符串,避免拼写不一致 - created_atupdated_at 必须有,餐饮场景常需查“10 分钟内未确认的订单” - 外键 customer_id 建议允许 NULL(堂食匿名下单常见)

order_items 表必须拆分菜品与规格,不能只存 menu_id

用户点的是“宫保鸡丁(微辣,加花生)”,不是抽象的“宫保鸡丁”。如果 order_items 只记 menu_id,结账后无法还原当时选择——辣度、配菜、是否去葱等都丢了。

正确结构包含: - menu_id(指向菜品主表) - specification 字段存 JSON,如 {"spicy":"mild","add":"peanuts"};或更规范地建独立 item_specifications 表 - notes 字段留作自由备注(“不要香菜”“打包”) - 单价 unit_price 必须快照保存,否则菜单调价后历史订单金额对不上

菜品数据用 menus + menu_categories 两级,别硬塞进一个表

餐厅菜单常按“凉菜/热菜/酒水/套餐”分类,且分类可能动态增减(比如夏天加“冰饮”类)。若把分类名直接存在 menus.category_name 字段,会导致: - 修改分类名要全表 UPDATE - 无法设置分类排序(“酒水”总得排最后) - 不能给分类设启用/禁用状态(下架某类但保留菜品)

推荐做法: - menu_categories 表含 idnamesort_orderis_active - menus 表用 category_id 关联,加 is_available 控制单个菜品上下架 - 查询某分类下可用菜品时,两表 JOIN + WHERE category.is_active = 1 AND menu.is_available = 1

高并发下单时,SELECT ... FOR UPDATE 锁哪一行?别锁整张表

库存扣减场景(如“麻婆豆腐只剩 2 份”),多个服务员同时点单,必须防超卖。错误做法:SELECT stock FROM menus WHERE id = 123 后再 UPDATE——中间有竞态窗口。

Shop7z网上购物系统至尊版
Shop7z网上购物系统至尊版

Shop7z网上购物系统支持电脑版+手机版+支付宝及微信支付,支持QQ和微信一键登陆,系统集众家之所长,大气超美观页面+手机版+商品组合套餐+限时抢购秒杀+图片批量上传+淘宝数据包导入+弹出式分类菜单+不同规格不同价格+新订单邮件通知+销售报表打印与Excel输出+物流跟踪打印查询+会员积分及优惠券+邮件群发+图片在线管理+销售统计报表+五种价格体系+礼品礼券+微信公众号支付+扫码支付等等等。

下载

正确姿势: - 在事务中执行 SELECT stock FROM menus WHERE id = 123 FOR UPDATE,锁住该行 - 立即判断 stock >= required_qty,不满足则 ROLLBACK - 满足则 UPDATE menus SET stock = stock - ? WHERE id = 123 - 注意:FOR UPDATE 只在事务内有效,且索引必须覆盖 WHERE 条件(id 主键天然支持) - 切勿在 orders 表上加锁——那会阻塞所有新订单,而库存锁只影响同一菜品

START TRANSACTION;
SELECT stock FROM menus WHERE id = 123 FOR UPDATE;
-- 应用层判断库存是否充足
UPDATE menus SET stock = stock - 1 WHERE id = 123;
INSERT INTO order_items (order_id, menu_id, quantity, unit_price) VALUES (456, 123, 1, 28.00);
COMMIT;

最易被忽略的一点:菜品库存字段 stock 必须是 INT 且带符号(支持临时负数调试),但业务逻辑里绝不允许负库存出库——扣减前校验比锁更前置、更轻量。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

663

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

246

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

529

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.8万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 796人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号