【问题标题】:Create Mysql Trigger before Insert在插入之前创建 Mysql 触发器
【发布时间】:2015-01-20 07:42:42
【问题描述】:

我尝试在 Adminer 上创建一个 MYSQL 触发器,但它不起作用。 这是我的代码:

    CREATE TRIGGER handle100kRows BEFORE INSERT ON `4013834123456`
FOR EACH ROW
BEGIN

    IF (SELECT COUNT(*) FROM `4013834123456`) = "100000" THEN BEGIN
        DELETE FROM 4013834123456 ORDER BY id LIMIT 1
    END
    END IF

END;

出现以下错误:(1064):(1064):第6行'4013834123456 ORDER BY id LIMIT 1 END END IF END'附近的语法错误

我刚刚尝试过 ;在 END 上,但随后出现更多错误... 我使用 Adminer 4.1.0 和 MySQL 数据库! 谢谢帮忙!

更新,现在可以了,带分隔符:

delimiter |
CREATE TRIGGER handle100kRows BEFORE INSERT ON `4013834123456`
FOR EACH ROW
BEGIN
    IF (SELECT COUNT(*) FROM `4013834123456`) = "100000" THEN
        DELETE FROM `4013834123456` ORDER BY id LIMIT 1;
    END IF;
END;
delimiter;

【问题讨论】:

    标签: mysql triggers adminer


    【解决方案1】:

    你忘了用反引号转义表名4013834123456

    还有你和end太多了。

    delimiter |
    CREATE TRIGGER handle100kRows BEFORE INSERT ON `4013834123456`
    FOR EACH ROW
    BEGIN
        IF (SELECT COUNT(*) FROM `4013834123456`) = "100000" THEN
            DELETE FROM `4013834123456` ORDER BY id LIMIT 1;
        END IF;
    END
    |
    delimiter ;
    

    【讨论】:

    • 好吧,我这样转义了:DELETE FROM 4013834123456 ORDER BY id LIMIT 1 -> NOW: (1064): 第 7 行 'END END IF END' 附近的语法错误(` 未显示)
    • 我认为 END 和 ENDIF 末尾缺少分号
    • 现在:在插入 4013834123456 之前为每一行创建触发器句柄 100kRows BEGIN IF (SELECT COUNT(*) FROM 4013834123456) = "100000" THEN DELETE FROM 4013834123456 ORDER BY id LIMIT 1 ;万一;结尾;出现:(1064): 第 5 行 '' 附近的语法错误和 (1064): 第 1 行 'END IF' 附近的语法错误
    猜你喜欢
    • 2021-09-29
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多