如何使用 CSV(平面文件)更新 MySQL 数据库并在插入前验证数据

Posted

技术标签:

【中文标题】如何使用 CSV(平面文件)更新 MySQL 数据库并在插入前验证数据【英文标题】:How to Update MySQL Database with CSV(flat-file) and validate data before insertion 【发布时间】:2011-09-16 15:32:49 【问题描述】:

我每天需要将大约 40K 记录更新到我的 php/mysql 应用程序中。 推荐的最佳方法是什么?

我对在文件中加载数据进行了一些研究,以将平面文件加载到临时 MySQL 表中并在整个列上运行验证,而不是一次一行地进行。稍后使用主键并在数据库中插入/更新。

但是对于具有多选选项或多个有效值的数据?我如何在数据库中更新它们之前验证它们。

选项使用管道分隔。

例如,多选数据是颜色类型 有效值为 红色的 绿色 蓝色 棕色的 黑色的 白色

原始值示例案例场景是

案例 1 需要验证的原始数据 红色|绿色|黄色

如何在临时表中验证这些数据,以便 RED 和 GREEN 通过验证而 YELLOW 被剥离并进入错误日志?

如何在具有 40K 多条记录的 csv/tabdelimited 平面文件中批量执行上述验证?

【问题讨论】:

【参考方案1】:

我喜欢你评估列而不是逐行的方法,在我看来,这会给你带来性能提升。

为了增加您的想法,为什么不创建一个函数来验证特定列。对于具有多个正确值的列,您只需将您的检查语句放入 switch 语句或该函数内部的东西中。

例子:

//Example function validates a field that contains an integer value
function validateField1($x)


   //if necessary you could parse apart the value before "switching" it.

   if(isset($x))
   
      switch($x)
      
         case 1: //integer 1 is a valid value
            return true;
         case 3: //integer 3 is a valid value
            return true;
         default://for all other values return false
            return false;
      
   

通过这种方式,您可以逐个评估字段。除此之外,如果您的 validate 函数返回 false 值,您可以在将 .csv 文件上传到数据库之前以编程方式对其进行编辑。

我不知道这是否适合你,但请告诉我们结果如何!

问候,

H

【讨论】:

以上是关于如何使用 CSV(平面文件)更新 MySQL 数据库并在插入前验证数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 CSV 文件更新 MySQL 表

将数据导出到 CSV 平面文件时如何解决嵌入的文本限定符问题?

如何把csv文件导入到sql数据库

如何将平面文件加载到 Oracle 数据库中

使用php从csv快速更新大量数据mysql [关闭]

平面文件作为输入 - MySQL 最佳实践