MySQL - CSV 更新(不是插入)到现有表中?

Jak*_*son 8 mysql csv

我有一个包含以下列的表格:

id | name | city
Run Code Online (Sandbox Code Playgroud)

该表中有 1000 个条目。

我有一个行数有限的 CSV 文件,如下所示:

id,city
34,Denver
45,Kansas City
145,New York
Run Code Online (Sandbox Code Playgroud)

我可以LOAD DATA INFILE用来将我的 CSV 导入到我的表中,而不是插入新条目,而是根据id列更新行吗?

Rol*_*DBA 7

REPLACE机械地运行DELETEINSERT。这可能会改变 PRIMARY KEY。

这是您可以做的其他事情。

假设您的表名为 name_city,它看起来像这样:

CREATE TABLE name_city
(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,
    city VARCHAR(30) NOT NULL,
    PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)

并且您想要执行LOAD DATA INFILE.

以下是根据 id 更新城市的步骤:

步骤 01) 创建另一个用于导入的表

CREATE TABLE name_city_import LIKE name_city;
Run Code Online (Sandbox Code Playgroud)

步骤 02) 从导入表中删除名称列

ALTER TABLE name_city_import DROP COLUMN name;
Run Code Online (Sandbox Code Playgroud)

步骤 03) 执行导入 name_city_import

LOAD DATA INFILE 'somefile.csv' INTO TABLE name_city_import ...
Run Code Online (Sandbox Code Playgroud)

步骤 04) 执行 UPDATE JOIN

UPDATE name_city_import B
INNER JOIN name_city A USING (id)
SET A.city = B.city;
Run Code Online (Sandbox Code Playgroud)

步骤 05) 删除导入表

DROP TABLE name_city_import;
Run Code Online (Sandbox Code Playgroud)

就是这样。

试一试 !!!


a1e*_*x07 0

如果 id 上有唯一索引或者它是主键,则可以添加REPLACELOAD DATA INFILE 'file_name' REPLACE ....

  • 这个命令如何知道CSV文件中的id字段与主键id对应? (3认同)