Nic*_*ick 0 mysql csv sql-update sql-insert
我正在使用从第三方源提取的csv文件填充MySQL表.每天都会更新csv,如果列a,b和c的出现已经存在,我想更新MySQL表中的行,否则插入行.我使用load data infile进行初始加载,但我想针对每日csv pull更新.我熟悉INSERT ... ON DUPLICATE,但不熟悉csv导入的上下文.关于如何在INSERT中嵌入LOAD DATA LOCAL INFILE的任何建议... ON DUPLICATE a,b,c - 或者如果这是最好的方法将非常感激.
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;
Run Code Online (Sandbox Code Playgroud)
由于您使用LOAD DATA LOCAL INFILE,因此它等同于指定IGNORE:即将跳过重复项.但
如果指定REPLACE,则输入行将替换现有行.换句话说,主键或唯一索引的值与现有行的值相同.
所以你可以更新导入
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;
Run Code Online (Sandbox Code Playgroud)
https://dev.mysql.com/doc/refman/5.6/en/load-data.html
如果您需要更复杂的合并逻辑,可以将CSV导入临时表,然后发出INSERT ... SELECT ... ON DUPLICATE KEY UPDATE