如何在不重复记录的情况下从文件中加载数据
How to load data from file without repeating records
我有一个包含逗号分隔字段的文本文件。文件中的记录可以重复。但是,当我将它们插入数据库时,我想插入第一次出现的记录并忽略任何重复的记录(基于应该是唯一的第一个字段值)。
这是我的声明,由于我将其标记为唯一的第一个文件的重复值而导致错误。
LOAD DATA LOCAL INFILE '/var/lib/mysql-files/myfile.txt'
INTO TABLE `scheme`.`mytable` fields terminated BY ',';
您可以使用 loaddata 将行加载到 'temp' table,然后
INSERT INTO targetTable (firstField, ...set of columns...)
SELECT DISTINCT firstField, ...set of columns...
FROM temp
WHERE firstField NOT IN (SELECT firstField FROM target);
它需要:firstField -> 列集(功能依赖)
或者您可以使用带有 IGNORE 选项的 INSERT(重复时不会出错):
INSERT IGNORE INTO targetTable (firstField, ...set of columns...)
SELECT DISTINCT firstField, ...set of columns...
FROM temp;
或 table 架构相同:
INSERT IGNORE INTO targetTable
SELECT *
FROM temp;
原来很简单。只需使用 IGNORE
和 MySQL 将忽略重复出现。
LOAD DATA INFILE '/var/lib/mysql-files/myfile.txt'
IGNORE INTO TABLE `scheme`.`mytable` fields terminated BY ',';
但是,这将忽略所有其他错误。所以要谨慎使用。
我有一个包含逗号分隔字段的文本文件。文件中的记录可以重复。但是,当我将它们插入数据库时,我想插入第一次出现的记录并忽略任何重复的记录(基于应该是唯一的第一个字段值)。
这是我的声明,由于我将其标记为唯一的第一个文件的重复值而导致错误。
LOAD DATA LOCAL INFILE '/var/lib/mysql-files/myfile.txt'
INTO TABLE `scheme`.`mytable` fields terminated BY ',';
您可以使用 loaddata 将行加载到 'temp' table,然后
INSERT INTO targetTable (firstField, ...set of columns...)
SELECT DISTINCT firstField, ...set of columns...
FROM temp
WHERE firstField NOT IN (SELECT firstField FROM target);
它需要:firstField -> 列集(功能依赖)
或者您可以使用带有 IGNORE 选项的 INSERT(重复时不会出错):
INSERT IGNORE INTO targetTable (firstField, ...set of columns...)
SELECT DISTINCT firstField, ...set of columns...
FROM temp;
或 table 架构相同:
INSERT IGNORE INTO targetTable
SELECT *
FROM temp;
原来很简单。只需使用 IGNORE
和 MySQL 将忽略重复出现。
LOAD DATA INFILE '/var/lib/mysql-files/myfile.txt'
IGNORE INTO TABLE `scheme`.`mytable` fields terminated BY ',';
但是,这将忽略所有其他错误。所以要谨慎使用。