使用外键更新一个表中的总计

时间:2012-01-16 16:42:46

标签: php mysql

我只是在学习外键。我正在简化我的表格:

Table:  item
Columns:  item_id (PK), qty

Table:  item_change_log
Columns:  id (PK), item_id (indexed), change_value

两张桌子都是INNODB。

每次更改项目级别时,更改的数量都会记录在item_change_log.change_value中。我希望change_value自动添加/减去item.qty

预期行为:

用户创建项目X. item.item_id = X, qty = 0。尚未在item_change_log中创建记录。 用户将X的数量更改为2. item_change_log: id = 1, item_id = X, change_value = 2。此change_value会通过外键自动增加item.qty = 2

我知道如何让item id的外键相互看到,但我不知道如何添加“math”元素,或者如果可能的话。

谢谢!

2 个答案:

答案 0 :(得分:3)

这不是通过外键处理的。相反,请查看item_change_log表格上的creating a trigger,无论何时插入行,都会更新item

答案 1 :(得分:3)

你需要的是一个触发器,但是哪个?

  • 由于它是您的用户实际修改的item_change_log表, 你需要在item_change_log上触发
  • 由于你总是插入item_change_log,你需要一个INSERT 触发
  • 由于您只想更新项目,如果插入到item_change_log 真的很有效,你想要一个AFTER INSERT触发器

所以我们走了

CREATE TRIGGER update_item_table AFTER INSERT ON item_change_log
  FOR EACH ROW BEGIN
    UPDATE item SET qty=qty+NEW.qty WHERE item_id=NEW.item_id;
  END;