MYSQL LOAD DATA INFILE忽略重复行(自动增量作为主键)

时间:2012-10-15 07:51:09

标签: mysql csv load-data-infile

我使用LOAD DATA INFILE命令遇到了一些麻烦,因为我想忽略已经在数据库中的行...如果我有一个包含数据的表,如下所示,

id  |name   |age
--------------------
1   |aaaa   |22
2   |bbbb   |21
3   |bbaa   |20
4   |abbb   |22
5   |aacc   |22

其中id是自动递增值。我拥有的csv文件包含如下数据,

"cccc","14"
"ssee","33"
"dddd","22"
"aaaa","22"
"abbb","22"
"dhgg","34"
"aacc","22"

我想忽略行

    "aaaa","22"
    "abbb","22"
    "aacc","22"

并将其余内容上传到表格中。我已经将所有内容上传到表中的查询如下,

    LOAD DATA INFILE 'member.csv'
    INTO TABLE tbl_member
    FIELDS TERMINATED BY ','
           ENCLOSED BY '"'
           ESCAPED BY '"'
           LINES TERMINATED BY '\n'
    (name, age);

请帮助我完成这项任务..我将非常感谢..我试过很多链接但没有帮助:(

3 个答案:

答案 0 :(得分:39)

在年龄列上创建一个UNIQUE索引,然后:

LOAD DATA INFILE 'member.csv'
IGNORE INTO TABLE tbl_member
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
(name, age);

答案 1 :(得分:5)

一种方法是使用临时表。上传到此并使用SQL从临时表更新tbl_member。

INSERT INTO tbl_member
SELECT Field1,Field2,Field3,... 
FROM temp_table
WHERE NOT EXISTS(SELECT * 
             FROM tbl_member 
             WHERE (temp_table.Field1=tbl_member.Field1 and
                   temp_table.Field2=tbl_member.Field2...etc.)
            )

答案 2 :(得分:0)

您可以在多个列上创建唯一索引。 LOAD DATA不会插入与所有列上的现有行匹配的行。

e.g。 ALTER TABLE tbl_member ADD UNIQUE unique_index(name,age)