2016-12-06 11 views
0

MySQLデータベースに新しいトリガを作成して、挿入後にセル値を更新しました。既定値として更新したいセル(gp_per)はnull値に設定されています。ここでMySQLトリガが起動しないAFTER INSERT

はトリガーです:

SET @gp_per = ((@retail_price - (@retail_price * 0.23)) - @cost_price)/(@retail_price * 0.23) 

それは罰金を作成し、私は構文エラーを持っていないが、私は新しい行を挿入しようとすると、gp_perセルではなく、正しい値を更新するよりもNULLとしてダウンしています。私は本当に前にトリガーを使用していないので、私は間違っていることを100%確信していません。以下は

トリガーです:

enter image description here

とテーブルの構造:任意のフィードバックのための

enter image description here

ありがとう!

+2

セッション変数を作成したときは、列の値には何も触れません。助けを求める前にまずトリガーについて読んでみましょう。それらの構文は簡単ですが、基本的なSQLクエリを知っていれば、トリガーも処理できます。 – Mjh

答えて

0

creating triggers上でMySQLのドキュメントが言うように:トリガー本体内

、あなたは別名OLDとNEWを使用することにより(表がトリガーに関連付けられている)対象のテーブルの列を参照することができます。 OLD.col_nameは、更新または削除される前の既存行の列を参照します。 NEW.col_nameは、挿入される新しい行の列または更新後の既存の行を参照します。

それでもtrigger examples上のMySQLのドキュメントは言う:

BEFOREトリガーで

あなたはそれのためのUPDATE権限を持っている場合、あなたはまた、SET NEW.col_name =値とその値を変更することができます。つまり、トリガーを使用して値を変更して、新しい行に挿入するか、行を更新することができます。 (行の変更が既に持っている発生しますので、そのようなSET文は、トリガーAFTERでは効果がありません。)あなたは

SET NEW.gp_per=((NEW.retail_price - (NEW.retail_price * 0.23)) - NEW.cost_price)/(NEW.retail_price * 0.23) 

表現を使用する必要が

上記手段あなたがする必要があります挿入トリガーの前にトリガーをに変更してください。 MySQLバージョンがサポートしている場合は、トリガの代わりに生成されたカラムを使用することもできます。

関連する問題