0

我正在尝试通过从 Java 进程调用 MySQL 的 LOAD DATA INFILE 将数据从文本文件加载到 MySQL 表中。该文件可以包含当前日期和前几天的一些数据。该表还可以包含以前日期的数据。问题是文件中先前日期的某些列可能已更改。但我不想更新所有这些列,而只想更新某些列的最新值。

示例,表格

+----+-------------+------+------+------+
| 编号 | 报告日期 | val1 | val2 | val3 |
+----+-------------+------+------+------+  
| 1 | 2012-12-01 | 10 | 1 | 1 |  
| 2 | 2012-12-02 | 20 | 2 | 2 |
| 3 | 2012-12-03 | 30 | 3 | 3 |
+----+-------------+------+------+------+

输入文件中的数据:

1|2012-12-01|10|1|1
2|2012-12-02|40|4|4
3|2012-12-03|40|4|4
4|2012-12-04|40|4|4
5|2012-12-05|50|5|5

加载后的表格应如下所示

mysql> 从 load_infile_tests 中选择 *;
+----+-------------+------+------+------+
| 编号 | 报告日期 | val1 | val2 | val3 |
+----+-------------+------+------+------+
| 1 | 2012-12-01 | 10 | 1 | 1 |
| 2 | 2012-12-02 | 40 | 4 | 2 |
| 3 | 2012-12-03 | 40 | 4 | 3 |
| 4 | 2012-12-04 | 40 | 4 | 4 |
| 5 | 2012-12-05 | 50 | 5 | 5 |
+----+-------------+------+------+------+
5 行一组(0.00 秒)

请注意,列 val3 值不会更新。我也需要对大文件执行此操作,有些文件可能大于 300Megs 或更多,因此它需要是一个可扩展的解决方案。

谢谢,阿尼鲁达

4

1 回答 1

1

It would be good to use LOAD DATA INFILE with REPLACE option, but in this case records will be dropped and added again, so old val3 values will be lost.

Try to load data into temporary table, then update your table from temp. table using INSERT ... SELECT/UPDATE or INSERT ... ON DUPLICATE KEY UPDATE statements.

于 2012-12-14T08:05:57.650 回答