我正在尝试从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
答案 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_name
和user_column_name
名称,您必须提供真实的名称。括号列表如下表名应包含列名,而不是列值。您可能需要在VALUES
中使用new.
为列名添加前缀,以告诉MySQL从新插入的行中提取那些(在触发器中称为new
)。