我在让这个触发器工作时遇到问题。这是代码:
BEGIN
DECLARE newprice double;
DECLARE id int;
DECLARE rentdate DATE;
SET id := RESERVATION.RES_ID;
SET rentdate := "SELECT RES_RENT_DATE
FROM RESERVATION
WHERE RES_ID = id";
SET newprice := (NEW.RES_RETURN_DATE - rentdate)*RESERVATION.RES_CAR_PPD;
UPDATE RESERVATION
SET RESERVATION.RES_TOTAL_PRICE = newprice WHERE
RESERVATION.RES_ID = id;
END
基本上我想要做的只是更改汽车返回日期时的总价格。触发器应在更新返回日期时执行。更新时给出了错误:#1109 - 字段列表中的未知表'RESERVATION'。我不知道我做错了什么。
答案 0 :(得分:0)
有几个问题:
SET id := RESERVATION.RES_ID;
中那样随意引用表格列。您只能在有效的SQL语句(例如SELECT
)或NEW
/ OLD
中引用列。UPADTE
)。 MySQL中禁止这种变异行为。BEFORE
触发器。见下面的例子。您的触发器可以归结为此
CREATE TRIGGER tg_bu_reservation
BEFORE UPDATE ON reservation
FOR EACH ROW
SET NEW.res_total_price = (NEW.res_return_date - NEW.res_rent_date) * NEW.res_car_ppd;
注意:因为它是一个语句触发器现在不需要BEGIN...END
阻止并更改DELIMITER
。
这是 SQLFiddle 演示