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

执行SQL脚本时LOAD DATA语句被忽略的问题排查请求

问题排查:LOAD DATA INFILE在脚本中被忽略但单独执行正常

老兄,我一眼就瞅出问题大概率出在分隔符没有重置上!你前面的触发器创建代码用了DELIMITER $修改了语句分隔符,但创建完触发器后没把分隔符改回默认的;——这就导致后面的LOAD DATA INFILE语句被MySQL当成了触发器定义的一部分,自然就被忽略不执行了。

具体原因解释

当你执行DELIMITER $后,MySQL会把$当作语句结束的标志,而不是原来的;。你创建触发器的语句最后用$结束,这没问题,但之后没有执行DELIMITER ;重置分隔符,所以后面的LOAD DATA INFILE语句虽然看起来独立,但MySQL会一直等待$作为结束符,根本不会执行它。而单独执行时,分隔符是默认的;,所以能正常运行。

修正后的完整脚本

DELIMITER $ 
CREATE TRIGGER fulldate BEFORE INSERT ON Tabela_veche 
FOR EACH ROW 
BEGIN 
    IF new.fulldate IS NULL THEN 
        SET new.fulldate = data_corecta(new.data_achizitie, new.ora_achizitie); 
    END IF; 
END $
-- 关键步骤:把分隔符改回默认的分号
DELIMITER ;

-- 现在这条语句就能正常执行了
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/fisier.txt' 
INTO TABLE Tabela_veche 
CHARACTER SET latin1 
FIELDS TERMINATED BY '/$/' 
OPTIONALLY ENCLOSED BY '$' 
LINES STARTING BY '/' 
TERMINATED BY '/
' 
(@data_achizitie, @ora_achizitie, nume, prenume, cantitate, unitate_masura, piesa) 
SET data_achizitie = STR_TO_DATE(@data_achizitie,'%m:%Y:%d'), 
    ora_achizitie = replace(@ora_achizitie, ',', '');

验证建议

  • 先加入DELIMITER ;那一行,再重新执行完整脚本,应该就能正常触发数据加载操作了。
  • 执行脚本时可以查看MySQL的执行反馈,确认触发器创建成功后,分隔符已经重置,再执行数据加载语句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:30:45