使用 CSV 更新 MySQL 表记录
Posted
技术标签:
【中文标题】使用 CSV 更新 MySQL 表记录【英文标题】:Update MySQL table records using CSV 【发布时间】:2019-06-11 04:47:53 【问题描述】:我使用的是 5.7.21-21 版本的 mysql,我有一个表 shipping_rate
,其结构如下:
+---------+----+
|entity_id|rate|
+---------+----+
我想使用 MySQL 命令行使用 csv 文件更新记录,这是我的 csv 文件的样子:
我尝试关注此solution,并修改一些代码以使其适合我的表格:
CREATE TEMPORARY TABLE temp_update_table (entity_id,rate)
LOAD DATA INFILE 'sr.csv'
INTO TABLE temp_update_table FIELDS TERMINATED BY ',' (entity_id, rate);
UPDATE shipping_rate
INNER JOIN temp_update_table on temp_update_table.entity_id = shipping_rate.entity_id
SET shipping_rate.rate = temp_update_table.rate;
DROP TEMPORARY TABLE temp_update_table;
但我总是遇到这样的错误:
ERROR 1064 (42000):您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在'率附近使用的语法)
【问题讨论】:
【参考方案1】:您缺少temp_update_table
表中列的数据类型。
CREATE TABLE temp_update_table (
entity_id INT,
rate INT,
INDEX (entity_id)
);
在连接中使用的列上添加索引也是一个好主意。
由于您的 CSV 文件有一个应跳过的标题行,因此您需要使用 IGNORE
子句。
LOAD DATA INFILE 'sr.csv'
INTO TABLE temp_update_table
FIELDS TERMINATED BY ','
IGNORE 1 LINES
(entity_id, rate);
【讨论】:
它有效,但是当我选择临时表的第一条记录时,它显示 enity_id 并且速率为 0 result from select 您的 CSV 文件有一个标题行,因此请使用LOAD DATA INFILE
中的 IGNORE 1 LINE
子句跳过它。
得到这个错误ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IGNORE 1 LINE' at line 1
当我把IGNORE 1 LINE
放在LOAD DATA INFILE
的末尾时,mysql 命令看起来像这样LOAD DATA INFILE 'sr.csv' INTO TABLE temp_update_table FIELDS TERMINATED BY ',' (entity_id, rate) IGNORE 1 LINE;
这是LINES
不是LINE
。我在几分钟前更正了我的答案。
必须在(entity_id, rate)
之前。以上是关于使用 CSV 更新 MySQL 表记录的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter - 使用日期格式将表记录导出为 CSV
使用 phpMyAdmin 将带有部分数据的制表符分隔的 csv 文件导入 mysql 表