通过消除重复将数据从文本文件加载到mysql数据库
Posted
技术标签:
【中文标题】通过消除重复将数据从文本文件加载到mysql数据库【英文标题】:Loading data from text file to mysql database by eliminating duplicates 【发布时间】:2011-12-14 05:56:49 【问题描述】:我想将数据从文本文件加载到数据库,如果数据已经存在,我需要在加载时转义该数据。
我正在使用以下查询将数据从文本文件加载到 mysql 数据库。
"将文件'F:/wbrdata.txt'中的数据加载到表wbrdatatable中 以“,”结尾的字段 可选地用“”括起来 以 '\r\n' 结尾的行 忽略 1 行(频道、时间、脉搏率、驻留 ID、目标 ID);"
它将数据附加到现有的表数据中。我想避免在加载到数据库时表和文件中已经存在(重复)的公共数据。
我怎样才能做到这一点? 谢谢
问候 桑卡尔
【问题讨论】:
你用什么程序来加载文本文件到mysql 在java中我写了程序来执行上面的查询。 我正在使用简单的 JDBC 程序加载执行此查询 String str="Load data infile 'F://Hello.txt' into table newwbrtable fields 以 ',' 结尾,可选地由 \"\ 括起来" 以 '\r\n' 结尾的行忽略 1 行 (time, channel1,channel2);"; Class.forName(driverclass).newInstance(); con = DriverManager.getConnection(jdbcURL, 用户, 密码); st = con.createStatement(); 【参考方案1】:尝试将文本文件加载到临时表中(与目标表相同),然后从临时表中删除重复项并将其余部分复制到目标表中。
示例(假设 wbrdatatable_temp 是一个包含文本文件中所有数据的临时表):
CREATE TABLE wbrdatatable(
id INT(11) NOT NULL AUTO_INCREMENT,
column1 VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO wbrdatatable VALUES
(1, '111'),
(2, '222'),
(3, '333'),
(4, '444'),
(5, '555');
CREATE TABLE wbrdatatable_temp(
id INT(11) NOT NULL AUTO_INCREMENT,
column1 VARCHAR(255) DEFAULT NULL,
PRIMARY KEY (id)
);
INSERT INTO wbrdatatable_temp VALUES
(1, '111'),
(2, '222'),
(10, '100'), -- new record that should be added
(11, '200'); -- new record that should be added
-- Copy only new records!
INSERT INTO wbrdatatable
SELECT t1.* FROM wbrdatatable_temp t1
LEFT JOIN wbrdatatable t2
ON t1.id = t2.id AND t1.column1 = t2.column1
WHERE t2.id IS NULL;
-- Test result
SELECT * FROM wbrdatatable;
+----+---------+
| id | column1 |
+----+---------+
| 1 | 111 |
| 2 | 222 |
| 3 | 333 |
| 4 | 444 |
| 5 | 555 |
| 10 | 100 | -- only new record is added
| 11 | 200 | -- only new record is added
+----+---------+
【讨论】:
我认为您没有收到我的问题。在将数据从文本文件加载到数据库时,如果表中存在相同的数据,那么我将跳过该数据,剩下的我必须加载到表中。 我建议您将所有数据加载到另一个表中,然后删除重复项并添加记录。您甚至可以使用一个查询删除/添加,我将在我的答案中添加一个示例。 非常感谢。它对我有用。但是它为相同的数据(临时表)使用了额外的内存,它不会对庞大的数据库文件造成任何问题吗?在此之前,我们不能使用一些带有某些条件的子查询以及我的查询(将文件加载到数据库中)来转义现有数据。请不要我的这类问题。再次感谢您.... 您也可以将这些字段设为唯一。然后使用 IGNORE 选项加载数据,它会自动跳过所有重复项。【参考方案2】:试试这个逻辑。
1. Upload Text File Data
2. Check record using select statement on your database
if(recordexist==true)
save
else
not save
问候
【讨论】:
感谢您的回复。你的意思是,在完成将数据从文件加载到数据库后,我必须过滤所有重复项,对吗?我们不能在使用某些子查询加载到数据库时消除重复项吗?如果您知道可以发送该语法,请......以上是关于通过消除重复将数据从文本文件加载到mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章