トリガーで計算させた値を履歴として記録するには
株の購入履歴をトリガー内部で計算したいと考えています。
buying_stockの購入をすると、トリガーで最新の数量を計算しnow_stockテーブルに最新情報を記入、更新します。
テーブル
●buying_stock
d1(プライマリ),d2_usr_id,d3_stock_id,d4_buy_stock_volume,
●now_stock
f2_stock_id(プライマリ),f3_stock_name,f4_latest_stock_volume
トリガ
DELIMITER //
CREATE TRIGGER a_ref0 BEFORE INSERT ON buying_stock
FOR EACH ROW BEGIN
INSERT INTO now_stock SET f2_stock_id=NEW.d3_stock_id,f3_stock_name=f3_stock_name,f4_latest_stock_volume=f4_latest_stock_volume+NEW.d4_buy_stock_volume
ON DUPLICATE KEY UPDATE f2_stock_id=NEW.d3_stock_id,f3_stock_name=f3_stock_name,f4_latest_stock_volume=f4_latest_stock_volume+NEW.d4_buy_stock_volume;
END;
//
DELIMITER ;
ここまでは出来ました。
ただ、これでは最新価格は残りますが、購買履歴が残りません。
そこで、下記のトリガーを作成しました。
テーブル
●stock_history
g1(プライマリ),g2_stock_id,g3_stock_name,g4_latest_stock_volume
トリガー
DELIMITER //
CREATE TRIGGER a_ref000 BEFORE INSERT ON now_stock
FOR EACH ROW BEGIN
INSERT INTO stock_history SET g2_stock_id=NEW.f2_stock_id,g3_stock_name=NEW.f3_stock_name,g4_latest_stock_volume=NEW.f4_latest_stock_volume;
END;
//
DELIMITER ;
しかしながら、g3_stock_nameとg4_latest_stock_volumeがNULLになってしまいます。
古い購入履歴と最新の購入数は別物として捉えられているようです。
一方、同一のものとして指示するために、テーブルをg2_stock_id(プライマリ),g3_stock_name,g4_latest_stock_volumeとすると、Duplicate違反を指摘されます。
トリガーで計算した後の履歴を残すためにはどのような方法があるでしょうか?
テーブルには
●stock_name
a1(プライマリ),a2_stock_id,a3_stock_name,
というものもございますので、これを使用すれば出来るのかもしれません。
ご指導いただきたくお願いいたします。
お礼
なるほど、そうだったのですね! ご回答、有り難うございました。