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

创建存储过程时SQL语法报错求助:UPDATE语句单独执行正常

解决MariaDB创建存储过程时的1064语法错误

这个问题我之前也碰到过,大概率是语句分隔符冲突搞的鬼!

问题原因

默认情况下,MySQL/MariaDB的语句分隔符是;。当你创建存储过程时,存储过程内部的UPDATE语句也会用;结尾,这会让SQLyog误以为整个CREATE PROCEDURE语句在UPDATE的;处就结束了,导致后续的END被当成无效语法,从而抛出1064错误。

解决方案:修改会话分隔符

你需要先临时修改会话的分隔符(比如改成//或$$),让数据库知道直到遇到这个新分隔符,才标志着整个存储过程创建语句的结束。具体步骤如下:

  1. 先设置新的分隔符
DELIMITER //
  1. 编写完整的存储过程定义(注意加上UPDATE的关联条件,避免全表更新!)
CREATE PROCEDURE sim_management_update()
BEGIN
    UPDATE bf_sim_management, test_sims
    SET bf_sim_management.sim_company_id = test_sims.company_id
    -- 必须加上关联条件,否则会造成全表错误更新!
    WHERE bf_sim_management.sim_id = test_sims.sim_id;
END //
  1. 把分隔符改回默认的;
DELIMITER ;

额外提醒

单独执行UPDATE语句正常,是因为此时只有一条语句,;能正确标识语句结束;但放在存储过程里时,必须处理分隔符冲突的问题。另外一定要记得给UPDATE加上关联条件,不然会导致bf_sim_management表的所有行都被更新,造成数据混乱!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:03:30