LOAD DATA LOCAL INFILE导入异常:ID_Niveau未自增问题求助
MySQL LOAD DATA LOCAL INFILE导入后自增ID_Niveau为0,未触发自增逻辑
我来帮你排查这个问题,大概率是LOAD DATA语句的配置细节没处理对,咱们一步步拆解:
问题核心分析
你的表结构里ID_Niveau是自增主键,但导入后出现ID为0的情况,本质是MySQL没有触发自增逻辑,反而把无效值塞进了自增字段——这通常是因为导入时没有明确指定要填充的字段,导致数据库错误地把文本内容映射到了自增ID字段上。
具体排查与修复步骤
1. 修正LOAD DATA语句(最关键的一步)
你原来的导入语句缺少了INTO TABLE和目标字段的指定,MySQL会默认把每行数据按顺序映射到表的所有字段(先ID_Niveau,再contenu)。但你的文本内容是字符串,无法转成有效的整数ID,所以MySQL会把它转成0,完全跳过了自增逻辑。
把语句改成这样,明确指定只导入contenu字段:
LOAD DATA LOCAL INFILE "C:/Utilisateurs/Moham/desktop/Bureau/Cesi/Ressources/lvl.txt" FIELDS TERMINATED BY '\n' ENCLOSED BY ';' LINES TERMINATED BY '\n' INTO TABLE lorann.Niveau (contenu);
这样MySQL会自动为ID_Niveau生成自增值,不会再用无效值填充。
2. 优化文本文件的分隔符配置
你的地图每行结尾都有;,当前的ENCLOSED BY ';'可能会把整个行内容(除了末尾的;)当作字段值,但如果行结尾还有换行符,可能会引入多余的空白字符。可以调整成更精准的分隔规则:
LOAD DATA LOCAL INFILE "C:/Utilisateurs/Moham/desktop/Bureau/Cesi/Ressources/lvl.txt" FIELDS TERMINATED BY ';' TRAILING NULLCOLS LINES TERMINATED BY '\r\n' -- Windows系统文本通常用\r\n换行,Linux/macOS用\n INTO TABLE lorann.Niveau (contenu);
TRAILING NULLCOLS:用来忽略每行末尾多余的分隔符,避免导入空行或无效数据- 换行符根据你的系统调整,Windows下用
\r\n更稳妥
3. 重置自增计数器(可选,针对已导入错误数据的情况)
如果已经导入了ID为0的错误数据,先清空表并重置自增计数器:
TRUNCATE TABLE lorann.Niveau;
TRUNCATE会彻底清空表,并把自增计数器重置为1,之后再用修正后的语句重新导入。
4. 验证导入结果
导入后可以执行查询确认:
SELECT ID_Niveau, contenu FROM lorann.Niveau LIMIT 5;
如果ID从1开始递增,且contenu字段正确显示地图行内容,就说明问题解决了。
内容的提问来源于stack exchange,提问作者Rayan Ch
相关产品推荐
相关产品推荐

