2017-06-18 12 views
0

以下の図に示すように、paper_scoreとfinal_scoreの値を挿入すると、grand_score列が自動的に計算されます。msqlトリガーを使用して列を更新する方法

これは私がしようとしたものです:私paper_scoreとfinal_scoreの入力値、テーブルは更新されません

DELIMITER $$ 
CREATE TRIGGER myTableAutoSum 
BEFORE INSERT ON `stumgr_scores` FOR EACH ROW 
BEGIN 
SET NEW.grand_score= NEW.paper_score + NEW.final_score; 
END; 
$$ 
DELIMITER ; 

問題

(私はgrand_scoreを意味する)

Image

+0

あなたのコードの問題点は何ですか? –

+0

iがpaper_scoreとfinal_scoreの値を入力すると、テーブルが更新されません(私はgrand_scoreを意味します) –

答えて

0

値の1つがNULLでない限り、私はあなたのトリガーが間違っているのをすぐには見ません。それは簡単にCOALESCE()を使用して固定されている:

SET NEW.grand_score = COALESCE(NEW.paper_score, 0) + COALESCE(NEW.final_score, 0); 

私は、この目的のためにトリガを使用することを疑問視。値がそのように変化する場合は、UPDATEのトリガも必要です。

grand_totalをテーブルから削除して表示するのは簡単ではありませんか?

create view v_stumgr_scores as 
    select ss.*, 
      COALESCE(ss.paper_score, 0) + COALESCE(ss.final_score, 0) as grand_score 
    from stumgr_scores ss; 

さらに、最新版のMySQLでは、生成された列を使用するだけです。それが最良の解決策です。値にインデックスを作成することもできます。

+0

ありがとうございます。これは、paper_scoreとfinal_scoreの値が入力されたときに、列(grand_score)を自動更新するという私の問題を解決します。 –

+0

@FavourChukwuedo。 。 。テーブルをクエリすると、ビューと生成された列(5.7のいくつかのバージョン)の両方が計算を実行します。これは、最新のデータが使用されていることを保証します。 –

関連する問題