0

我有,

<pre lang="SQL">LOAD DATA LOCAL INFILE 'C:\Users\mydesk\Desktop\dcc.csv' INTO TABLE DATAS.TABLE IN FIELDS TERMINATED BY ',' ENCLOSED BY '"' lines terminated by '\n'</pre>

在我的程序中查询,将数据从 csv 文件上传到 mysql。但是在某些行中会出现“主键的重复条目”错误。如何在每一行中捕获这些异常并处理不同的查询?

例如,我在 csv 文件中有 10 行,其中一些行与DATAS.TABLE. 所以当这些记录插入到表中DATAS.TABLE时,我需要执行更新查询。

4

3 回答 3

1

我建议

  1. 创建一个没有约束的临时表
  2. 首先将数据加载到该表中
  3. 清理、清理、验证(包括消除 PK 中的重复项)、转换您的数据
  4. 将干净的数据插入到您的事实表中
  5. 截断临时表

使用这种方法,您可以进行多步骤复杂验证,加入参考表和/或事实表以发现不一致或其他问题。

在这种情况下,查找重复项只是在临时表上进行简单 SELECT 的问题。

于 2013-03-13T05:54:25.153 回答
1

可以建议在第一遍将数据从 csv 加载到临时表中。

然后使用这个临时表分两步处理数据(1)更新临时表中的现有行和(2)在第二遍中从临时表中插入新行。

于 2013-03-13T05:38:57.303 回答
1

来自MySQL 文档

REPLACE 和 IGNORE 关键字控制对在唯一键值上重复现有行的输入行的处理:

如果您指定 REPLACE,输入行将替换现有行。换句话说,主键或唯一索引的值与现有行相同的行。请参见第 13.2.7 节,“替换语法”。

如果您指定 IGNORE,将跳过与唯一键值上的现有行重复的输入行。如果您不指定任一选项,则行为取决于是否指定了 LOCAL 关键字。如果没有 LOCAL,则在找到重复键值时会发生错误,并忽略文本文件的其余部分。对于 LOCAL,默认行为与指定 IGNORE 相同;这是因为服务器无法在操作过程中停止文件的传输。

因此,如果您需要更新重复值的行,请在查询中提及REPLACE 。

于 2013-03-13T05:43:07.487 回答