2016-09-25 40 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 ;