【问题标题】:MySQL Delcare causing errorMySQL Delcare 导致错误
【发布时间】:2013-10-16 09:17:21
【问题描述】:

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

遗憾的是,我无法让我的 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 

感谢您的帮助并阻止我亲自defenestrating

【问题讨论】:

    标签: mysql triggers declare


    【解决方案1】:

    试试这个:

    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

    【讨论】:

    • 感谢您的解释,现在可以使用了!万岁!没有开窗供meeee
    • 没问题 :) 我很高兴停止开窗;)
    猜你喜欢
    • 2017-01-14
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-13
    相关资源
    最近更新 更多