如何将TXT名单导入MySQL指定列并从ID1开始填充
解决LOAD DATA INFILE导入数据到指定行的问题
问题原因
你当前使用的LOAD DATA INFILE语句默认是向表中插入新记录,而非更新已有行。由于你的表id字段设置了AUTO_INCREMENT=7,新插入的数据会从ID7开始生成新行,不会覆盖ID1-6的name_eslang字段。
解决方案
要把文件中的值更新到ID1-6的已有行,需通过临时表中转后执行更新操作,具体步骤如下:
1. 创建临时表存储导入的名称
临时表用来记录导入的名称和对应顺序,方便后续匹配ID1、2、3...:
CREATE TEMPORARY TABLE temp_names ( row_num INT AUTO_INCREMENT PRIMARY KEY, name_eslang VARCHAR(500) );
2. 将name.txt导入临时表
用你原有的导入语句把文件内容导入临时表:
LOAD DATA INFILE 'name.txt' INTO TABLE temp_names FIELDS TERMINATED BY '' LINES TERMINATED BY '\r\n' (name_eslang);
3. 更新categories表的指定行
通过关联临时表的行号和categories的id,把名称对应更新到ID1、2、3、4(你的文件只有4个值,若后续补充到6个值,此语句会自动匹配ID1-6):
UPDATE categories c JOIN temp_names t ON c.id = t.row_num SET c.name_eslang = t.name_eslang;
4. 清理错误插入的行(可选)
如果不需要之前插入的ID7及以后的新行,可以删除它们:
DELETE FROM categories WHERE id >=7;
之后可重置自增序列(可选):
ALTER TABLE categories AUTO_INCREMENT =7;
备选方案(少量数据场景)
如果只有少量数据需要更新,也可以直接用UPDATE语句逐个指定ID更新:
UPDATE categories SET name_eslang = 'apple' WHERE id = 1; UPDATE categories SET name_eslang = 'banana' WHERE id = 2; UPDATE categories SET name_eslang = 'orange' WHERE id = 3; UPDATE categories SET name_eslang = 'kiwi' WHERE id = 4;
内容的提问来源于stack exchange,提问作者Anonymous Girl
相关产品推荐
相关产品推荐

