MySQL 触发器:防止通过 IF 语句插入
MySQL Trigger: Prevent Insert by IF statement
我尝试为 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 数据库编写我的第一个触发器。它应该防止在当前时间和给定时间戳的上下文中对“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 ;