如何将文件数据加载到MySQL表的指定列?
嘿,刚好能帮到你!针对你要把point.txt里的points数据加载到cc表指定列的需求,分两种场景给你解决方案:
场景1:插入新行,仅填充points列
如果你的cc表中name列允许为空(或者有默认值),直接在LOAD DATA语句里指定目标列即可,命令如下:
LOAD DATA LOCAL INFILE '/path/point.txt' INTO TABLE cc (points);
注意:这个命令会往表中新增行,
name列会被设为NULL(如果没有默认值的话),适合你需要批量添加只有points数据的新行的情况。
场景2:更新现有行的points列
如果你的需求是覆盖cc表中已有行的points值,那直接用LOAD DATA没法完成,得结合临时表来中转数据,步骤如下:
- 创建临时表,结构和你的
points列一致(比如points是INT类型):
CREATE TEMPORARY TABLE temp_points (points INT);
- 把
point.txt的数据加载到临时表:
LOAD DATA LOCAL INFILE '/path/point.txt' INTO TABLE temp_points (points);
- 给临时表加一个自增序号列,用来匹配原表的行顺序(假设原表行顺序和文件里的points顺序完全对应):
ALTER TABLE temp_points ADD COLUMN row_num INT AUTO_INCREMENT PRIMARY KEY;
- 给
cc表临时加一个自增序号列(用来和临时表的行号匹配):
ALTER TABLE cc ADD COLUMN temp_row_num INT AUTO_INCREMENT PRIMARY KEY;
- 关联临时表,更新
cc表的points列:
UPDATE cc c JOIN temp_points tp ON c.temp_row_num = tp.row_num SET c.points = tp.points;
- 清理临时对象:
ALTER TABLE cc DROP COLUMN temp_row_num; DROP TEMPORARY TABLE temp_points;
补充:如果你的
cc表已经有一个唯一主键(比如name是主键),并且point.txt里的points是和name一一对应的,那可以调整临时表结构,把name也加进去(如果文件里有对应关系的话),直接通过主键关联更新,这样就不用加临时行号列啦。
内容的提问来源于stack exchange,提问作者suboss raj
相关产品推荐
相关产品推荐

