【问题标题】:load csv file content into mysql table with validation通过验证将 csv 文件内容加载到 mysql 表中
【发布时间】:2011-07-02 21:36:54
【问题描述】:

我想将一个大的 csv 文件(大约 12MO)导入 mysql 表,首先我尝试使用 LOAD DATA INFILE 它完美地工作,但在我的情况下,我想首先测试 csv 行以确定我是否要更新数据或插入新记录 所以解决方案是读取文件并将每一行的内容与表中已有的数据进行比较,并做出正确的操作 此方法也有效,但需要大量时间和资源

现在我的问题是

1:我可以使用 PHPMYADMIN 的导入功能吗(开源) 我的项目是商业的

2:如果可以,你知道一些关于这个的教程吗(任何想法)

3:如果没有,我不能,是否有这样的商业框架用于导出/导入

谢谢

【问题讨论】:

  • 我看不出 12Mb 怎么会被认为是一个“大文件”。
  • load data infile 有“replace | ignore”关键字。

标签: mysql csv phpmyadmin


【解决方案1】:

这实际上是很常见的 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 中的一组 AND 值来使用复合键,并注意您没有更新复合键,但您可能正在插入复合键。这应该是一个很好的开始。在您要求澄清之前,请使用实际代码更新您的问题。

【讨论】:

    【解决方案2】:

    MySQL 有特定的插入syntax 来处理重复行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2014-09-08
      相关资源
      最近更新 更多