You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器出现#1064语法错误,该如何解决?

解决MariaDB触发器中的#1064语法错误

先直接说问题所在:你的触发器代码里有两个关键语法错误,导致了这个#1064报错。

错误点拆解

  1. 多余的SELECT()包裹:给NEW字段赋值时,你用了SELECT(ROUND(...))和SELECT(UNIX_TIMESTAMP())——但ROUND()、UNIX_TIMESTAMP()都是直接返回值的内置函数,根本不需要用SELECT语句包裹,这是典型的语法冗余错误。
  2. 缺失END IF;闭合语句:你的IF判断块没有用END IF;收尾,数据库会认为逻辑结构不完整,直接抛出语法异常。

修正后的完整触发器代码

DELIMITER $$ 
CREATE TRIGGER `Activation_code` 
BEFORE UPDATE ON `user_users` 
FOR EACH ROW 
BEGIN 
    IF OLD.activation_code_time < UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 15 MINUTE)) THEN 
        SET NEW.activation_code = ROUND((RAND() * (999999-100000)) + 100000), 
            NEW.activation_code_time = UNIX_TIMESTAMP(); 
    END IF; -- 补上缺失的IF块闭合语句
END $$ 
DELIMITER ;

额外优化建议

把代码拆分成多行、每个逻辑块单独成行,不仅能避免类似的语法疏漏,后续维护和排查问题也会更方便。

内容的提问来源于stack exchange,提问作者Shah Rushabh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:41:26