MySQL触发器: Prevent Insert by IF statement

标签 mysql if-statement triggers syntax-error

我尝试为 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/

相关文章:

mysql - 即使 where 条件失败,也从表 1 左连接表 2 返回记录

Bash:如果然后声明多个条件

java - Android - 根据用户选择设置背景颜色

sql - 使用触发器的 PostgreSQL 审计历史

php - 使用php将大量mysql记录转换为json

php - codeigniter 错误 : Unable to connect to your database server using the provided settings. 文件名 : core/Loader. php 行号:346

java - 当 if 条件为常量时,为什么无法检测到无法访问的代码?

javascript - itemView 触发到达父级的自定义事件

Postgresql 分区表删除触发器失败

mysql - 将数据从一个表复制到另一个表并更新日期