如何从文件中加载数据而不重复记录

时间:2019-04-02 18:30:24

标签: mysql database relational-database mysql-workbench

我有一个文本文件,其中包含逗号分隔的字段。文件中的记录可以重复。但是,当我将它们插入数据库时​​,我想插入记录的第一个匹配项,并忽略任何重复的记录(基于第一个字段值,该值应该是唯一的)。

这是我的陈述,该陈述由于我将其标记为唯一的第一个文件的重复值而导致错误。

LOAD DATA LOCAL INFILE '/var/lib/mysql-files/myfile.txt'
INTO TABLE `scheme`.`mytable` fields terminated BY ',';

2 个答案:

答案 0 :(得分:0)

您可以使用loaddata将行加载到“临时”表中,然后

INSERT INTO targetTable (firstField, ...set of columns...)  
  SELECT DISTINCT firstField, ...set of columns... 
    FROM temp 
    WHERE firstField NOT IN (SELECT firstField FROM target);

它需要:firstField->列集(功能依赖)

或者您可以将INSERT与IGNORE选项一起使用(重复时没有错误):

INSERT IGNORE INTO targetTable (firstField, ...set of columns...)
 SELECT DISTINCT firstField, ...set of columns... 
    FROM temp;

或与表模式相同:

INSERT IGNORE INTO targetTable 
   SELECT * 
    FROM temp;

答案 1 :(得分:0)

转起来很容易。只需使用IGNORE,MySQL就会忽略重复出现。

LOAD DATA INFILE '/var/lib/mysql-files/myfile.txt'
IGNORE INTO TABLE `scheme`.`mytable` fields terminated BY ',';

但是,这将忽略其他所有错误。因此,应谨慎使用。