MySQL如何使用触发器将值减少1

时间:2019-03-18 13:48:33

标签: mysql triggers

我正在使用MySQL构建一个简单的视频游戏商店库存和销售数据库。 目前,我有一个库存表:

game_id      count
1            5
2            2
3            1
4            7

和销售表

game_id      price     otherstuff 
3            xxx       xxxxx
2            xxxx      xxxxxxxx

我想创建一个触发器,以检查将哪些game_id添加到sales表中。然后在库存表中将计数减少-1。我猜想它的“更新后”。

CREATE DEFINER=`root`@`localhost` TRIGGER `sales_AFTER_INSERT` AFTER INSERT ON `sales` FOR EACH ROW BEGIN
update inventory set count = count-1 where game_id = game_id;
END

测试完此脚本后,每次我插入一些新销售时,它只会使每个game_id计数减少-1。

2 个答案:

答案 0 :(得分:1)

您需要使用NEW:

CREATE DEFINER=`root`@`localhost` 
   TRIGGER `sales_AFTER_INSERT` 
   AFTER INSERT ON `sales` FOR EACH ROW 
   BEGIN
        update inventory set count = count-1 where game_id = new.game_id;
END

答案 1 :(得分:1)

查询中的game_id不正确。如果要从修改后的记录中获取game_id,则应使用NEW.game_id

CREATE DEFINER =`root`@`localhost`
  TRIGGER `sales_AFTER_INSERT`
  AFTER INSERT
  ON `sales`
  FOR EACH ROW
BEGIN
  UPDATE inventory SET count = count - 1 WHERE game_id = NEW.game_id;
END