0

我正在尝试创建一个触发器,在将项目插入数据库时​​将它们标记为已删除。

可悲的是,我无法让我的 DECLARE 停止出错,我查看了 DECLARE 文档以及一些示例,但我一定遗漏了一些东西。

到目前为止我的查询是:

CREATE TRIGGER set_deleted BEFORE INSERT ON customercontact
FOR EACH ROW
BEGIN
DECLARE numrow INT; /* line 4 */

        SELECT COUNT(*)
        INTO numrow
        FROM orders
        WHERE NEW.order_id = 1;

        if numrow >= 1 THEN
            SET new.deleted = 1;
        END IF;
END

错误消息显示:

#1064 - 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 4 

感谢您的帮助并阻止我为自己辩护

4

1 回答 1

2

尝试这个:

DELIMITER $$

CREATE TRIGGER set_deleted BEFORE INSERT ON customercontact
FOR EACH ROW
BEGIN
DECLARE numrow INT; /* line 4 */

        SELECT COUNT(*)
        INTO numrow
        FROM orders
        WHERE NEW.order_id = 1;

        if numrow >= 1 THEN
            SET new.deleted = 1;
        END IF;
END$$

DELIMITER ;

创建 TRIGGER 或 STORED PROCEDURE 时需要更改分隔符。

默认情况下,MySQL 本身将分号识别为语句分隔符,因此您必须临时重新定义分隔符,以使 MySQL 将整个存储程序定义传递给服务器。否则,MySQL 在到达 END 语句之前中断 CREATE TRIGGER(在第一个分号上,在您的情况下,它是 DECLARE 语句)。

您可以查看文档以获取更多详细信息: http: //dev.mysql.com/doc/refman/5.5/en/stored-programs-defining.html

于 2013-10-16T09:21:26.033 回答