1

我有一个表 salesOrderItems:

soItemID           INT(11)         PK
salesOrderID       INT(11)
productID          INT(11)
cost               DECIMAL(7,2)
qty                TINYINT(2)
extendedCost       DECIMAL(8,2)

通过 PHP,用户会看到一个表单来输入 productID(通过下拉菜单),然后该选择会填充成本字段。用户然后输入数量。 extendedCost在表格上不可见。

我想要的是一个触发器,它应该简单地自动计算/插入extendedCost(即 - 乘以成本 x 数量)并填充extendedCost,但我得到 1064 错误。

这是触发器 - 我到底错过了什么???我发誓我已经这样做了 20 次:

DELIMITER $$

DROP TRIGGER IF EXISTS EXTENDEDCOST $$

CREATE TRIGGER EXTENDEDCOST AFTER INSERT ON salesOrderItems FOR EACH ROW BEGIN

    UPDATE salesOrderItems
    SET extendedCost = (cost * qty)
    WHERE soItemID = NEW.soItemID;

END $$

DELIMITER ;

结果:

ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-db' at line 1

SQL Statement:

USE <my db/schema>



ERROR: Error when running failback script. Details follow.



ERROR 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-db' at line 1

SQL Statement:

USE <my db/schema>

我确定这很愚蠢,但它让我发疯,我完全被卡住了,需要额外的眼睛......

谢谢各位,提前!

4

1 回答 1

0

既然您试图插入一个计算值,为什么要执行额外的更新而不是在 INSERT 之前设置触发时间:

CREATE TRIGGER EXTENDEDCOST BEFORE INSERT ON salesOrderItems FOR EACH ROW BEGIN
  SET NEW.extendedCost = NEW.cost * NEW.qty
END $$

另请参阅此答案mysql 'after insert' trigger to calculate a field based on other fields

于 2012-08-15T19:17:40.143 回答