2012-02-18 5 views
1

で挿入の作成、SQLがエラーメッセージなしで失敗します。は、私がProductPriceテーブルにProductsテーブルから簡単な挿入トリガーを作成しようとしていますMySQLのトリガー

CREATE TRIGGER productTrigger AFTER INSERT ON Products 
    FOR EACH ROW 
BEGIN 
    INSERT INTO ProductPriceHistory (CURRENT_DATE(), CURRENT_USER(), productCode, productName, productLine, productVendor, quantityInStock, buyPrice) 
    VALUES (productCode, productName, productLine, productVendor, quantityInStock, buyPrice); 
END 

答えて

2

新しく挿入された行の値を参照するには、NEWキーワードを使用し、関数名をカラム名ではなく値として使用します。

CREATE TRIGGER productTrigger AFTER INSERT ON Products 
    FOR EACH ROW 
BEGIN 
    INSERT INTO ProductPriceHistory (log_date, log_user, productCode, 
     productName, productLine, productVendor, quantityInStock, buyPrice) 
    VALUES (CURRENT_DATE(), CURRENT_USER(), NEW.productCode, NEW.productName, 
     NEW.productLine, NEW.productVendor, NEW.quantityInStock, NEW.buyPrice); 
END 
+0

私はドキュメントでこれを見つけました。キャッチをありがとう、どのように2つのトリガーを追加することができます私はそれらが商品の新しいレコードであり、列が変更されたときに挿入するように? – Warz

+0

@Warzまったく同じ名前のトリガーを追加し、 'AFTER INSERT'を' AFTER UPDATE'に置き換えると、その効果が得られます。 Afaikには、両方のイベントに対して同じトリガーを追加するためのショートカットはありません。 –

+0

私はそれを試してみましたが、mysqlは私にエラーを与えました:このバージョンのMySQLは、 '同じアクション時間とイベントを持つ複数のトリガを1つのテーブルでサポートしていません' – Warz

0

は、あなたの関数を移動してみてくださいVALUESに呼び出します。

INSERT INTO ProductPriceHistory (date_column_name, user_column_name, productCode, productName, productLine, productVendor, quantityInStock, buyPrice) 
VALUES (current_date(), current_user(), new.productCode, new.productName, new.productLine, new.productVendor, new.quantityInStock, new.buyPrice); 

私はdate_column_nameuser_column_nameの名前を作りました。あなたは本当のものを提供する必要があります。カッコで囲まれたリストは、テーブル名には列の値ではなく列の名前を含める必要があります。また、VALUESのカラム名の前に、new.という接頭語を付けて、新しく挿入された行(トリガー内でnewと呼ばれます)からそれらを抽出するようにMySQLに指示する必要があります。

関連する問題