2016-12-07 19 views
1

私はそれらのいくつかのために悲惨なニーズに遭って以来、私はトリガについてすべてを検索してきましたが、どのくらい試しても問題ありませんMysqlワークベンチ6.3 CEは、 。私のサーバーは5.7で、リファレンスマニュアルを読みましたが、まだ動作させることはできません。Mysqlのトリガーは動作しません

DELIMITER $$ 
CREATE TRIGGER updateproductostock 
BEFORE INSERT ON producto 
FOR EACH ROW 
BEGIN 
NEW.prod_points = prod_price/2; 
END$$ 
DELIMITER ; 

私は、ID、説明、価格、株式やポイントを持っているproductoという名前のテーブルを持っています。私がしたいのは、ポイント値を価格値の半分にすることです。したがって、製品の価格が100ドルの場合、ポイントの値は50になります。

私はトリガーを作成できません、mysqlは私に構文エラーを与えます。

私もproductoの株式価値がテーブルために依存するトリガーを作成したいと思います。 注文に注文ID、商品ID、説明、数量があります。だから私は新しい注文を挿入するときにのproductoの株式の価値を変更したいと思う。 オーダーが同じ製品IDで製造されている場合は、製品の在庫にオーダーの数量を加算します。

また、mysqlは構文エラーを返します。

私はすべての場所を検索し、さまざまな構文を試しましたが、エラーが発生します。私のmysqlにはトリガーのオプションがあります。

または、私がやりたいことをやるための簡単な方法がありますか?助けてください

答えて

0

あなたが示しているのは、prod_price/2NEW.prod_price/2になるはずです。

後者の問題については、トリガーが注文テーブルにある必要があります。一般的に、そのような値を維持することは、実行が急を要する理由がない限り、容易に計算可能でなければならない場合には眉をひそめます。私の推測では、あなたの問題は、あなたの注文テーブルにキーワードで名前が付けられていて、それを正しく区切ることを忘れていることでしょう。

+0

かわいいですか?それで良い方法がありますか?ストアドプロシージャ? – Eduardo

+1

このように集計された値を最初に覚えている部分は、このようなデータに対して非常に頻繁なクエリを実行する必要がある大規模なデータベースを実行していて、データが矛盾するリスクを適切に管理している場合、それ以外の場合は、 'SELECT ...、SUM(c)from JOIN b ON a.id = b.a_id GROUP BYのようないくつかのクエリを書くことを避けるために、データが矛盾する可能性があります。 .. ..しかし、あなたがそのような価値を維持しようとするならば、トリガーはおそらく最も信頼できる方法の1つです(彼らが決して無効にならない限り)。 – Uueerdo

関連する問題