2017-04-06 18 views
0

私はordersproductsという2つのテーブルを持っています。商品表には列名Qty_On_Handがあり、その商品の在庫量が保管されています。オーダー表には、オーダー番号が入力される行Qtyが含まれています。注文された金額から製品テーブルの在庫量を更新するトリガーを作成しようとしています。これらのテーブルは、 "ProductID"でリンクされています。注文数量から商品在庫を更新するトリガー

UPDATE products 
SET products.Qty_On_Hand = Products.Qty_On_Hand - orders. qty 
WHERE products.ProductID = orders.ProductID 

ご協力いただきますようお願い申し上げます。

答えて

0

これはすべきことです。新しい注文を挿入するたびに実行されるトリガーが必要です。

CREATE TRIGGER QuantityUpdate 
AFTER INSERT 
    ON orders FOR EACH ROW 

BEGIN 

UPDATE products 
SET products.Qty_On_Hand = Products.Qty_On_Hand - New. qty 
WHERE products.ProductID = New.ProductID ; 

END; 
0

トリガーを作成する方法の良い例がたくさんあります。これは私の最初の検索でポップアップされた:https://www.sitepoint.com/how-to-create-mysql-triggers/

ご注文額を更新/削除できるかどうかを忘れないようにしてください。


しかし、私はトリガーを自分ですばらしいと考えても、ほとんど使用しません。主に彼らを忘れるのは簡単ですから。それから、あなたはコードを徹底的に調べて、なぜそれがどんなふうに動作しているのかを知ることができます。コード自体には答えがありません。答えはデータベースに隠されています。それとも、まったく逆のことですが、引き金がそこにあり、それがあなたのためにあなたの仕事をする魔法のブラックボックスであると考えていることが分かります。したがって、あなたはその機能を二重チェックしないでください。逆効果の可能性があります。あなたの代わりにそのため

https://stackoverflow.com/a/460343/7081773

(あなたが唯一のデータベースですべてをやっている場合を除き)、私が注文への挿入を実行するコードにロジックを移動します。もちろん、注文修正のための関数を作成する必要があります。これらの関数は在庫の変更も処理します。あなたは直接SQLクエリの代わりにそれらを使用します。それはあなたがコードベースをより良くコントロールできるようにするでしょう。

また、在庫自体を変更しないでください。アプリケーションの残りの在庫を読んでいるときは、注文額を差し引いてください(多分、そのためのビューを作成してください)。在庫金額は、実際に変更されたとき(商品出荷時など)にのみ変更してください。あなたが本当に在庫量を知っているかのように、あなたはどれだけ注文され、どれくらいの在庫があるかを常に計算することができます。もちろん、あなたが始めたのと同じように、別の方向に進むことができます。それも動作します。私は通常、このようにしているので、ちょっとだけ論理的に思えます...

関連する問題