我很难让这个扳机起作用。以下是代码:
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 --字段列表中的未知表“预约”。我不知道我做错了什么。
发布于 2014-01-11 21:52:46
有几个问题:
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演示
https://stackoverflow.com/questions/21067984
复制相似问题