我尝试为 MySQL 数据库编写第一个触发器。它应该在当前时间和“容量”中的给定时间戳的上下文中防止在“course_student”上插入(以及稍后更新) ,但我仍然遇到语法错误。
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 ;
我翻译了所有名字;所以可能存在输入错误。
最佳答案
您缺少一些逗号和一些弥补的 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 ;
关于MySQL触发器: Prevent Insert by IF statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39691236/