如何将list.txt数据导入MySQL topics表other列(对应ID1-6)
解决MySQL导入数据更新现有行而非新增行的问题
方法一:临时表中转更新(无需修改源文件)
LOAD DATA INFILE默认行为是插入新行,要更新现有ID的other列,最稳妥的方式是先把文件数据导入临时表,再关联原表完成更新:
- 创建临时表存储导入的文件数据
CREATE TEMPORARY TABLE temp_topics ( row_idx INT AUTO_INCREMENT PRIMARY KEY, other VARCHAR(255) NOT NULL ); - 将
list.txt的数据导入临时表
假设list.txt每行存储一个值(如apple、banana等),直接执行:
若文件有特殊分隔符,可添加LOAD DATA INFILE '/绝对路径/list.txt' INTO TABLE temp_topics (other);FIELDS TERMINATED BY '分隔符'参数适配格式。 - 关联临时表更新原表的
other列
利用临时表的自增row_idx对应原表的id(1-6):
临时表会在会话结束后自动销毁,无需手动清理。UPDATE topics t INNER JOIN temp_topics tt ON t.id = tt.row_idx SET t.other = tt.other;
方法二:直接用ON DUPLICATE KEY UPDATE(需修改源文件)
如果能给list.txt每行加上对应的ID(比如1,apple、2,banana这种格式),可以一步完成更新:
- 修改
list.txt内容,每行格式为ID,值,例如:
(补充ID5、6对应的值,若不需要可留空,但要保证格式一致)1,apple 2,banana 3,orange 4,kiwi 5,xxx 6,xxx - 执行带更新逻辑的
LOAD DATA语句
由于LOAD DATA INFILE '/绝对路径/list.txt' INTO TABLE topics FIELDS TERMINATED BY ',' (id, other) ON DUPLICATE KEY UPDATE other = VALUES(other);id是主键,当导入的ID已存在时,MySQL会自动执行更新而非插入新行。
关键注意点
- 确保MySQL服务有权限读取
list.txt,若文件在本地客户端,可改用LOAD DATA LOCAL INFILE(需先开启local_infile参数)。 - 若
list.txt只有4条数据,ID5、6的other列会保持NULL,可根据需求补充数据或调整关联逻辑。
内容的提问来源于stack exchange,提问作者Aashish Kumar Jaiswal
相关产品推荐
相关产品推荐

