创建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
相关产品推荐
相关产品推荐

