使用 CSV 更新 MySQL table 条记录
Update MySQL table records using CSV
我正在使用 5.7.21-21 版本的 MySQL,我有一个 table shipping_rate
结构如下:
+---------+----+
|entity_id|rate|
+---------+----+
我想使用 MySQL 命令行使用 csv 文件更新记录,这是我的 csv 文件的样子:
我尝试遵循此 solution,并修改了一些代码以使其适合我的 table:
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): 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 ' rate)
您缺少 temp_update_table
table 中列的数据类型。
CREATE TABLE temp_update_table (
entity_id INT,
rate INT,
INDEX (entity_id)
);
在连接中使用的列上添加索引也是一个好主意。
由于您的 CSV 文件有一个 header 行应该被跳过,您需要使用 IGNORE
子句。
LOAD DATA INFILE 'sr.csv'
INTO TABLE temp_update_table
FIELDS TERMINATED BY ','
IGNORE 1 LINES
(entity_id, rate);
我正在使用 5.7.21-21 版本的 MySQL,我有一个 table shipping_rate
结构如下:
+---------+----+
|entity_id|rate|
+---------+----+
我想使用 MySQL 命令行使用 csv 文件更新记录,这是我的 csv 文件的样子:
我尝试遵循此 solution,并修改了一些代码以使其适合我的 table:
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): 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 ' rate)
您缺少 temp_update_table
table 中列的数据类型。
CREATE TABLE temp_update_table (
entity_id INT,
rate INT,
INDEX (entity_id)
);
在连接中使用的列上添加索引也是一个好主意。
由于您的 CSV 文件有一个 header 行应该被跳过,您需要使用 IGNORE
子句。
LOAD DATA INFILE 'sr.csv'
INTO TABLE temp_update_table
FIELDS TERMINATED BY ','
IGNORE 1 LINES
(entity_id, rate);