PHPMyAdmin中MySQL语法的语法问题

时间:2014-01-11 21:16:20

标签: mysql

我在让这个触发器工作时遇到问题。这是代码:

 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'。我不知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

有几个问题:

  1. 您不能像SET id := RESERVATION.RES_ID;中那样随意引用表格列。您只能在有效的SQL语句(例如SELECT)或NEW / OLD中引用列。
  2. 您不能在定义触发器的同一个表上发出DML语句(在您的情况下为UPADTE)。 MySQL中禁止这种变异行为。
  3. 如果我理解正确并且您需要的所有值都在同一行,那么您只需要使用BEFORE触发器。见下面的例子。
  4. 您的触发器可以归结为此

    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 演示