MySQL批量更新两列:如何通过CSV(按主键映射)加载新值
批量更新MySQL商品表的解决方案
步骤1:创建临时表
先创建一个临时表存储CSV中的更新数据,字段类型需和原表items_tbl对应:
CREATE TEMPORARY TABLE temp_item_updates ( item_no VARCHAR(255), -- 必须与原表items_tbl的item_no类型完全一致(如原表是INT则改为INT) new_food_category VARCHAR(255), new_promo_type VARCHAR(255) );
步骤2:导入CSV数据到临时表
使用LOAD DATA LOCAL INFILE加载本地CSV文件,根据你的CSV格式调整参数:
LOAD DATA LOCAL INFILE 'C:/your_file_path/update_data.csv' -- 替换为你的CSV实际路径,Windows路径用/或\\ INTO TABLE temp_item_updates FIELDS TERMINATED BY ',' -- CSV字段分隔符,逗号为默认,制表符则改为'\t' ENCLOSED BY '"' -- 若CSV字段用双引号包裹则保留,无则删除此句 LINES TERMINATED BY '\n' -- Windows系统可尝试改为'\r\n' IGNORE 1 LINES; -- 若CSV第一行是表头则保留,无则删除此句
注意:需确保MySQL Workbench允许加载本地文件——在连接设置的
Advanced标签中开启LOCAL INFILE,或执行SET GLOBAL local_infile = 1;(需对应权限)。
步骤3:批量更新原表
通过主键item_no关联临时表与原表,批量更新目标字段:
UPDATE items_tbl JOIN temp_item_updates ON items_tbl.item_no = temp_item_updates.item_no SET items_tbl.food_category = temp_item_updates.new_food_category, items_tbl.promo_type = temp_item_updates.new_promo_type;
可执行以下语句验证更新结果:
SELECT i.item_no, i.food_category, i.promo_type FROM items_tbl i JOIN temp_item_updates t ON i.item_no = t.item_no;
可选:清理临时表
临时表会在会话结束后自动销毁,也可手动删除:
DROP TEMPORARY TABLE temp_item_updates;
内容的提问来源于stack exchange,提问作者LaChelle
相关产品推荐
相关产品推荐

