我有,
<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。但是在某些行中会出现&#34; PRIMARY KEY重复条目&#34; 错误。如何在每一行中捕获这些异常并处理不同的查询?
例如,我在csv文件中有10行,有些行与DATAS.TABLE
中的行相同。因此,当这些记录插入到表DATAS.TABLE
中时,我需要执行更新查询。
答案 0 :(得分:1)
可以建议在第一遍中将数据从csv加载到临时表。
然后使用此临时表分两步处理数据:(1)更新临时表中的现有行;(2)在第二遍中从临时表中插入新行。
答案 1 :(得分:1)
来自MySQL doc:
REPLACE和IGNORE关键字控制输入行的处理 复制唯一键值上的现有行:
如果指定REPLACE,则输入行将替换现有行。其他 单词,主键或唯一索引具有相同值的行 作为现有的行。请参见第13.2.7节“REPLACE语法”。
如果指定IGNORE,则输入复制a上现有行的行 跳过唯一键值。如果您未指定任一选项,则 行为取决于是否指定了LOCAL关键字。没有 LOCAL,当找到重复的键值时发生错误,并且 其余的文本文件被忽略。使用LOCAL,默认行为是 就像指定了IGNORE一样;这是因为服务器没有 在操作过程中停止传输文件的方法。
因此,如果您需要更新重复值的行,请在查询中提及 REPLACE 。
答案 2 :(得分:1)
我建议
使用该方法,您可以执行多步复杂验证,与参考表和/或事实表联接以查找不一致或其他问题。
在这种情况下,查找重复项只是在临时表上进行简单的SELECT。