我正在使用LOAD DATA LOCAL INFILE语句快速上传文件。
LOAD DATA LOCAL INFILE 'file_location/file.txt'
INTO TABLE mytable
FIELDS TERMINATED by '\t'
LINES TERMINATED BY '\n'
IGNORE 18 LINES //ignore some header info
(sampleID, testID);
但是过去我已经加载了一些文件,我想避免重复。
数据库结构包括自动递增的PK作为附加列。
不必打开每个文件并在上传之前进行搜索以确定这些记录是否已经存在,是否可以基于具有sampleID和testID行的方式修改我用来忽略重复行的命令在表中与传入文件匹配?
例如,假设当前表具有以下行:
tablePKID sampleID testID
0 0001 A
1 0001 B
2 0003 A
3 0003 B
我希望导入一个包含以下记录的文件
0001 A
0001 B
0001 C
0005 A
0005 B
如何仅确保
0001 C
0005 A
0005 B
是进口的吗?
答案 0 :(得分:1)
我不知道如何使tablePKID从0自动递增到现在,您现在可以在samplid和testid以及load..IGNORE上指定唯一键
DROP TABLE IF EXISTS T;
CREATE TABLE T
(tablePKID INT auto_increment primary key,
sampleID VARCHAR(10), testID VARCHAR(10));
alter table t
add unique key k1(sampleid,testid);
INSERT INTO T (sampleid,testid) VALUES
( '0001' , 'A'),
( '0001' , 'B'),
( '0003' , 'A'),
( '0003' , 'B');
文件data.txt
sampleid testid
"0001" "A"
"0001" "B"
"0001" "C"
"0005" "A"
"0005" "B"
LOAD DATA LOCAL INFILE 'C:\\Program Files\\MariaDB 10.1\\data\\sandbox\\data.txt'
ignore
INTO TABLE t
FIELDS TERMINATED by '\t'
enclosed by '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(sampleID, testID);
+-----------+----------+--------+
| tablePKID | sampleID | testID |
+-----------+----------+--------+
| 1 | 0001 | A |
| 2 | 0001 | B |
| 3 | 0003 | A |
| 4 | 0003 | B |
| 5 | 0001 | C |
| 6 | 0005 | A |
| 7 | 0005 | B |
+-----------+----------+--------+
7 rows in set (0.00 sec)