2011-08-11 224 views
1

當試圖下面創建觸發器,我得到這個消息MySQL錯誤#1064

#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 '; END' at line 9 

是否有人可以幫忙嗎?謝謝

delimiter $$ 

CREATE TRIGGER tr_update_item_status 
AFTER UPDATE ON check_in 
FOR EACH ROW 
BEGIN 
    IF OLD.quantity > 0 AND NEW.quantity <= 0 THEN 
    UPDATE check_in SET item_status = 'Sold'; 
    ELSEIF OLD.quantity <= 0 AND NEW.quantity > 0 THEN 
    UPDATE check_in SET item_status = 'Available'; 
    ENDIF; 
END;$$ 

delimiter ; 
+0

更新了我的答案! – RolandoMySQLDBA

+0

有什麼問題。 UPDATE命令將更新EVERY ROW WITH SAME item_status。我的答案將只更新有問題的行。請測試這個... – RolandoMySQLDBA

回答

3
DELIMITER $$ 

CREATE TRIGGER tr_update_item_status 
AFTER UPDATE ON check_in 
FOR EACH ROW 
BEGIN 
    IF OLD.quantity > 0 AND NEW.quantity <= 0 THEN 
    UPDATE check_in SET item_status = 'Sold'; 
    ELSEIF OLD.quantity <= 0 AND NEW.quantity > 0 THEN 
    UPDATE check_in SET item_status = 'Available'; 
    END IF; 
END $$ 

DELIMITER ; 

這應該工作。祝一切順利。

+0

感謝Ashwin,它完美的工作。 – Eric

+0

@Eric,歡迎:) –

1
DELIMITER $$ 

CREATE TRIGGER tr_update_item_status 
BEFORE UPDATE ON check_in 
FOR EACH ROW 
BEGIN 
    IF OLD.quantity > 0 AND NEW.quantity <= 0 THEN 
    SET NEW.item_status = 'Sold'; 
    ELSEIF OLD.quantity <= 0 AND NEW.quantity > 0 THEN 
    SET NEW.item_status = 'Available'; 
    END IF; 
END; $$ 

DELIMITER ; 

三(3)件事情:

  • 的ENDIF;應該是END IF;
  • 這應該是一個BEFORE UPDATE觸發器,因爲在任何表操作之前數據驗證更好
  • UPDATE語句在語義上是錯誤的。我改變了他們設置新的列名,而不是
+0

我試圖擺脫; END後,它仍然給我同樣的錯誤。 – Eric

+0

感謝羅蘭多。 ENDIF是問題。 – Eric