首页 > 解决方案 > 创建 BEFORE INSERT 触发器时出现模棱两可的错误

问题描述

我有一个Reservation表,并且正在创建一个 BEFORE INSERT 触发器来检查用户的预订是否已经在数据库中,即防止他进行重复预订。这样做是为了通知前端用户无法进行重复预订。

但是,mySQL 会引发此错误:ERROR 1064 (42000) at line 3: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 5. 由于某种原因,当 and 之间的主体BEGINEND空时,它不会引发错误。

CREATE TABLE reservation (
    customer_user_id integer,
    date integer,
    time integer,
    name varchar(100)
);

CREATE TRIGGER trigger_name
BEFORE INSERT -- error raised in this line
ON reservation FOR EACH ROW
BEGIN
    DECLARE sum INT;

    SELECT COUNT(*) 
    INTO sum 
    FROM reservation r
    WHERE (r.customer_user_id = new.customer_user_id)
    AND (r.date = new.date)
    AND (r.time = new.time);

    IF sum = 0 THEN
        INSERT INTO reservation values (new.customer_user_id, new.date, new.time, new.name);
    ELSE 
        RAISE NOTICE 'duplicate'
    END IF;
END; 

此外,这个触发器可以是对表的约束Reservation吗?例如(customer_user_id, date, time) UNIQUE,这将阻止添加重复项,但我对如何“发出”前端的“信号”一无所知,这反过来又提示用户他们不能添加重复的预订。抱歉,如果代码的某些部分可能很奇怪,我是 SQL 新手,并且学过 pSQL。

提前致谢!

标签: mysqlsql

解决方案


推荐阅读