我正在使用从第三方来源提取的 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/