使用 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 表记录的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中使用 CSV 更新 MYSQL 数据库?

Codeigniter - 使用日期格式将表记录导出为 CSV

通过验证将 csv 文件内容加载到 mysql 表中

使用 phpMyAdmin 将带有部分数据的制表符分隔的 csv 文件导入 mysql 表

如何使用 CSV(平面文件)更新 MySQL 数据库并在插入前验证数据

如何使用 PHP 在 MYSQL 中的数据库表中插入、更新、删除记录时创建日志