2012-01-16 14 views
0

私は外来キーについて学んでいます。私はこれに私のテーブルを簡素化しています:外部キーで1つのテーブルの合計を更新する

両方のテーブルは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になります。

アイテムIDの外部キーの作成方法は分かっていますが、 "math"要素を追加する方法や可能性がありません。

ありがとうございます!

答えて

3

必要なのはトリガーですが、それは何ですか?

  • それは、ユーザーが実際に変更するitem_change_logテーブルですので、 あなただけのアイテムを更新したいので、あなたはオールウェイズitem_change_logに挿入するので、あなたは
  • item_change_logにトリガーを必要とする、あなたはINSERT トリガー
  • が必要唯一、挿入は が実際に動作するitem_change_logする場合は、そこでここでは

    を行くINSERTトリガーAFTER

をしたいです10

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; 
+0

+1しかし、これは一行のステートメントなので、ここでは 'BEGIN'と' END'は必要ありません。 – netcoder

+0

@netcoderあなたが正しいことはもちろんですが、脳とのやりとりをしなくても、トリガーの冒頭に私の指が "それぞれの始まりに来る"と思っています。コードを更新しない - これはあなたのコメントの文脈を殺します。 –

3

これは外部キーでは処理されません。代わりに、行が挿入されるたびにitemを更新するitem_change_logテーブルのcreating a triggerを調べます。

関連する問題