You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用当前写法的WHERE语句?触发器库存递减需求咨询

关于你触发器WHERE语句的问题分析

你的核心思路是对的——在用户购买后减少对应店铺对应游戏的库存,但当前的WHERE语句存在几个问题,没法正确工作:

  1. 没有引用刚插入的记录:在触发器中,要获取刚插入到Purchase表的那条记录的字段值,必须使用NEW关键字(比如NEW.Shop ID),直接写PURCHASE.SHOP_ID的话,数据库不知道你要关联Purchase表中的哪一条记录,会导致逻辑错误。
  2. 字段名可能不匹配:看你的表结构描述,Purchase的外键是Shop ID和Game ID,但你代码里写的是PURCHASE.ID_GAME,这明显是字段名写错了;另外IN SHOP表的字段是How many games in shop,你用了HMGIS,如果这不是字段的别名,那也是一个错误。
  3. 带空格的标识符需要包裹:表名IN SHOP和字段名How many games in shop、Shop ID都包含空格,直接写会触发语法错误,需要用反引号(`)把这些标识符包裹起来。

修正后的触发器代码

CREATE TRIGGER update_shop_game_stock AFTER INSERT ON Purchase
BEGIN
    UPDATE `IN SHOP`
    SET `How many games in shop` = `How many games in shop` - 1
    WHERE `IN SHOP`.Shop_ID = NEW.`Shop ID`
      AND `IN SHOP`.Game_ID = NEW.`Game ID`;
END;

额外注意事项

  • 确保IN SHOP表中存在对应的Shop_ID和Game_ID组合记录,否则这条UPDATE语句不会有任何效果。如果需要处理“库存记录不存在”的异常场景,可以在触发器里添加判断逻辑(比如用IF EXISTS先检查,或者抛出错误)。
  • 触发器命名尽量语义化,比如update_shop_game_stock,方便后续维护时一眼看出它的作用。

内容的提问来源于stack exchange,提问作者John.Doh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:05:22