2016-07-30 28 views
1

あらかじめご了承ください!AFTER INSERT初期テーブルにデータを挿入した後、別のテーブルにデータを挿入するためのトリガー

エレクトロニクスオンラインショップ用の非常に簡単なデータベースを作成しました。

私はtbl_ordersを手作業で置いています(ユーザーはproduct_id、単位数、payment_details_idなどを手動で挿入します)、tbl_ordersにAFTER INSERTトリガーを作成してorder_idこれはtbl_orderのPKです)をpurchase_historyというテーブルに追加します。

テーブルpurchase_historyにもpurchase_dateカラムがあります。 PKはpurchase_idで、order_idはFKです。

私はトリガーに慣れていませんが、トリガーの中で簡単なクエリを試してみましたが、私が得ていたエラーは「良い」ものになっていました。

私が持っていた最後の試みは、これだった:私は偉大なだけでなく、時には、少しバギーや紛らわしいですMYSQL Workbenchを、使用しています

CREATE DEFINER = CURRENT_USER TRIGGER  `onlineshop`.`tbl_orders_AFTER_INSERT` AFTER INSERT ON `tbl_orders` FOR EACH ROW 
    BEGIN 

    INSERT INTO purchase_history (order_id) 
    VALUES (NEW.order_id); 

    INSERT INTO purchase_history (purchase_date) 

    VALUES (purchase_date = NOW()); 


    END 

+0

最後の試行でエラーが発生しましたか? – Philipp

答えて

1
CREATE TRIGGER `tbl_orders_AFTER_INSERT` AFTER INSERT ON `tbl_orders` 
FOR EACH ROW BEGIN 

INSERT INTO purchase_history (order_id, purchase_date) VALUES (NEW.order_id, NOW()); 

END; 

このようにすれば、両方のデータが履歴の同じ行に表示されるようになります。

DEFINER行が必要な場合:

CREATE DEFINER = CURRENT_USER 
TRIGGER stuff.`tbl_orders_AFTER_INSERT` AFTER INSERT ON `tbl_orders` 
FOR EACH ROW 
INSERT INTO purchase_history (order_id, purchase_date) VALUES (NEW.order_id, NOW()); 

私はいくつかのことを試してみました、MySQLはトリガを作成すると同時にbeginendDEFINER = ...が好きでないようです。トリガーではBEGINENDは不要ですが、ステートメントから削除する際に問題はありません。

関連する問題