执行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
相关产品推荐
相关产品推荐

