【问题标题】:mysql create trigger errormysql创建触发器错误
【发布时间】:2016-08-07 18:10:46
【问题描述】:

在创建触发器以在 MyISAM 引擎上强制执行外键检查时遇到问题。有什么建议么?请在下面查找错误。

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'ERROR 1644 (45000): Custom ForeignKeyError 附近使用的正确语法 ELSEIF (SELECT CO' at line 8 (SQL:

CREATE TRIGGER insert_user_permission                 
BEFORE INSERT ON user_permissions 
            FOR EACH ROW
            BEGIN
                IF (SELECT COUNT(*) FROM users WHERE users.id=new.user_id)= 0 THEN                        
                    SIGNAL SQLSTATE '45000' 
                    SET MESSAGE_TEXT = 'Custom ForeignKeyError'
                    ERROR 1644 (45000): Custom ForeignKeyError
                ELSEIF (SELECT COUNT(*) FROM permissions WHERE permissions.id=new.permission_id)= 0 THEN
                    SIGNAL SQLSTATE '45000' 
                    SET MESSAGE_TEXT = 'Custom ForeignKeyError'
                    ERROR 1644 (45000): Custom ForeignKeyError
                END IF;
            END;)

【问题讨论】:

    标签: mysql laravel


    【解决方案1】:

    删除错误生成语句的最后一部分。只需使用

    SIGNAL SQLSTATE '45000' 
    SET MESSAGE_TEXT = 'Custom ForeignKeyError';
    

    不要忘记该语句末尾的;

    根据您用于定义触发器的工具,您还需要定义另一个分隔符。

    delimiter |
    
    CREATE TRIGGER insert_user_permission                 
    BEFORE INSERT ON user_permissions 
    FOR EACH ROW
    BEGIN
        IF (SELECT COUNT(*) FROM users WHERE users.id=new.user_id)= 0 THEN                        
            SIGNAL SQLSTATE '45000' 
            SET MESSAGE_TEXT = 'Custom ForeignKeyError';
        ELSEIF (SELECT COUNT(*) FROM permissions WHERE permissions.id=new.permission_id)= 0 THEN
            SIGNAL SQLSTATE '45000' 
            SET MESSAGE_TEXT = 'Custom ForeignKeyError';
        END IF;
    END
    |
    delimiter ;
    

    【讨论】:

    • 谢谢,它成功了。不再收到解析错误。
    猜你喜欢
    • 2013-07-16
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多