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

创建MySQL存储过程AccLikesVid时调用NOW()报错1193,求排查

解决MySQL存储过程报错Error Code 1193: Unknown system variable 'now'

这问题我之前调试存储过程的时候也踩过坑,咱们来快速定位并解决:

核心问题原因

你碰到的Error Code 1193本质是MySQL把你想用的NOW()时间函数误判成了名为now的系统变量——而这个系统变量根本不存在。

为什么会出现这种情况?看你提供的代码里写的是NOW(),但大概率是你实际执行时不小心漏掉了括号,写成了now(没有括号)。MySQL的规则是:函数必须带括号才能被识别为函数调用,不带括号的标识符会被当作变量/列名处理。

修正后的完整存储过程代码

我帮你调整了代码,不仅修复了核心错误,还加了几个实用优化:

DELIMITER $$ 
CREATE PROCEDURE AccLikesVid(
    username VARCHAR(30), 
    vidid INT(11), 
    type BOOL
) 
BEGIN 
    IF (type = 1) THEN 
        -- 建议明确指定插入的列名,避免表结构变更导致插入失败
        INSERT INTO a_likes_v (username, vidid, like_time, like_type) 
        VALUES (username, vidid, NOW(), 1); 
    ELSE
        -- 可选:如果需要处理取消点赞的逻辑,可以在这里补充
        -- DELETE FROM a_likes_v WHERE username = username AND vidid = vidid;
    END IF;
END$$ 
DELIMITER ; -- 别忘了把分隔符改回默认的分号

几个关键注意事项

  • 必须带函数括号:NOW()是MySQL内置的获取当前时间的函数,一定要加括号;写now会被当成变量,直接触发1193错误。
  • 明确指定插入列名:避免依赖表列的默认顺序,后续如果表新增/调整列,存储过程不会直接报错。
  • 恢复默认分隔符:创建完存储过程后,记得用DELIMITER ;把分隔符改回默认值,否则后续的SQL语句会被当作存储过程的一部分执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:45:53