使用Mysql触发器创建插入

时间:2012-02-18 23:58:40

标签: mysql triggers

我正在尝试从Products表创建一个简单的插入触发器到ProductPrice表,sql失败,没有错误消息:

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 个答案:

答案 0 :(得分: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 

答案 1 :(得分: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.为列名添加前缀,以告诉MySQL从新插入的行中提取那些(在触发器中称为new)。