2016-09-25 2 views
0

Я пытаюсь написать свой первый триггер для базы данных MySQL. Он должен предотвратить вставку (и позже также обновления) на «course_student» в контексте текущего времени и данных временных меток в «вместимости», но я все еще получаю синтаксическую ошибку.MySQL Trigger: Prevent Insert by IF statement

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 ;