2016-09-25 76 views
0

我嘗試爲MySQL數據庫編寫我的第一個觸發器。它應該防止在「course_student」在當前時間和「容量」容量的上下文中插入(以後也更新),但我仍然收到語法錯誤。MySQL觸發器:防止按IF語句插入

DELIMITER $$ 

CREATE TRIGGER checkSubscribeTimeCourse 
BEFORE INSERT ON course_student 
REFERENCING NEW AS new 
FOR EACH ROW 

BEGIN 

    IF (SELECT COUNT(*) FROM capacity c, course_capacity cc 
     WHERE c.cid = cc.cid 
     AND cc.cid = new.cid 
     AND (c.end >= CURRENT_TIMESTAMP OR c.end IS NULL) 
     AND (c.start <= CURRENT_TIMESTAMP OR c.start IS NULL)<1) 
    THEN 
     SIGNAL SQLSTATE '45000' 
     SET MESSAGE_TEXT = 'Error' 
    END IF 

END 

DELIMITER ; 

我翻譯了所有的名字;所以也許有打字錯誤。

回答

2

你有幾個丟失的逗號,有些在最後組成了sql和一個缺失的分隔符。

DELIMITER $$ 

CREATE TRIGGER checkSubscribeTimeCourse 
BEFORE INSERT ON course_student 
FOR EACH ROW 
BEGIN 

    IF (SELECT COUNT(*) FROM capacity c, course_capacity cc 
     WHERE c.cid = cc.cid 
     AND cc.cid = new.cid 
     AND (c.end >= CURRENT_TIMESTAMP OR c.end IS NULL) 
     AND (c.start <= CURRENT_TIMESTAMP OR c.start IS NULL)<1) 
    THEN 
     SIGNAL SQLSTATE '45000' 
     SET MESSAGE_TEXT = 'Error'; 
    END IF; 

END$$ 

DELIMITER ;