我想将一个大的csv文件(大约12MO)导入到mysql表中,首先我尝试使用LOAD DATA INFILE它完美地工作,但在我的情况下,我想首先测试csv行以确定我是否要更新数据或插入新记录 因此,解决方案是读取文件并将每行的内容与表中已有的数据进行比较,并采取正确的操作 这种方法也有效但需要大量的时间和资源
现在我的问题是
1:我可以使用PHPMYADMIN的导入功能(开源) 我的项目是商业性的
2:如果是的话我可以,你知道一些关于这个(任何想法)的教程
3:如果我不能,是否有出口/进口的商业框架
谢谢
答案 0 :(得分:2)
这实际上是非常常见的SQL:你要么插入要么更新,是吗?所以你需要两个语句(一个用于更新,一个用于插入)以及一种判断是否应该插入的方法。你真正需要的是一个永远不会为单个记录(可以是复合键)和两个语句重复的唯一键,如下所示:
UPDATE right SET
right1 = left1,
right2 = left2,
etc
FROM the_import_table right
LEFT JOIN the_existing_data left ON left.key = right.key
WHERE right.key IS NOT NULL --note that I write in TSQL
INSERT INTO right (
right1,
right2,
etc
) SELECT
left1,
left2,
etc
FROM left
LEFT JOIN right on left.key = right.key
WHERE right.key IS NULL
请注意,您可以在WHERE中使用一组ANDed值来使用复合键,并注意您没有更新复合键,但您可能正在插入复合键。这应该是一个很好的开始。在您要求澄清之前,请使用实际代码更新您的问题。
答案 1 :(得分:1)
MySQL具有特定的插入syntax来处理重复的行。