mysql - 如果存在则更新否则插入 csv 数据 MySQL

标签 mysql csv sql-update sql-insert

我正在使用从第三方来源提取的 csv 文件填充 MySQL 表。每天 csv 都会更新,如果 a、b 和 c 列已经存在,我想更新 MySQL 表中的行,否则插入该行。我使用加载数据 infile 进行初始加载,但我想根据每日 csv 拉取进行更新。我熟悉 INSERT...ON DUPLICATE,但不熟悉 csv 导入的上下文。关于如何在 INSERT...ON DUPLICATE a, b, c 中嵌套 LOAD DATA LOCAL INFILE 的任何建议 - 或者如果这是最好的方法,我们将不胜感激。

LOAD DATA LOCAL INFILE 'C:\\Users\\nick\\Desktop\\folder\\file.csv' 
INTO TABLE db.tbl
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 lines;     

最佳答案

由于您使用 LOAD DATA LOCAL INFILE,它等同于指定 IGNORE:即重复将被跳过。 但是

If you specify REPLACE, input rows replace existing rows. In other words, rows that have the same value for a primary key or unique index as an existing row.

所以你更新导入可能是

LOAD DATA LOCAL INFILE 'C:\\Users\\nick\\Desktop\\folder\\file.csv' 
REPLACE
INTO TABLE db.tbl
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 lines;

https://dev.mysql.com/doc/refman/5.6/en/load-data.html

如果您需要更复杂的合并逻辑,您可以将 CSV 导入临时表,然后执行 INSERT ... SELECT ... ON DUPLICATE KEY UPDATE

关于mysql - 如果存在则更新否则插入 csv 数据 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32214063/

相关文章:

Excel 2019 : CountA is counting empty cells in data imported from CSV

sql - 在 SQL 2008 中使用 CASE 更新多行

MySQL 通过另一个表的最小值更新一个表

php - 在 php mysql 中按当前日期、周和月获取记录不起作用

mysql - 发布系统的表结构

php - PHP 连接服务器失败

python - 在python中写入csv时如何转义分号

sql - MySQL Count 基于多列的值

ruby - 如何从 CSV.read 中的 CSV 文件中获取标题,而 ruby​​ 中只有标题行

sql-server - SQL多次更新同一行