首页 > 解决方案 > 如何从文件中加载数据而不重复记录

问题描述

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

这是我的声明,由于第一个字段的重复值而导致错误,我将其标记为唯一。

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

标签: mysqldatabaserelational-databasemysql-workbench

解决方案


您可以使用 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;

推荐阅读