首页 > 解决方案 > 如何从 CSV 文件中获取 ID 并执行 mysql update 命令来更新 mysql 表中的大量更新

问题描述

我有一个名为employee_info 的mysql 表,它有很多数据,所以我必须根据作为该表主键的id 更新行。由于我们必须进行批量更新,有什么方法可以从 CSV 文件中获取“id”并使用 shell 脚本执行更新。

CSV 数据的屏幕截图

标签: mysqlshellshdeveloper-toolsscript

解决方案


您可以使用 mysql "LOAD DATA INFILE" 命令将 CSV 数据导入表中。查看 mysql 文档以了解加载时可能需要的任何其他选项。如果您的服务器要求您的文件在加载时放置在本地或服务器上的某个位置,请阅读安全要求。

方法一:

在您的 shell 脚本中,您可以使用以下内容加载数据:

myCommand="LOAD DATA INFILE '/file/path/myFile.CSV' INTO TABLE my_temp_table;"
 
mysql -u username -p password -e $myCommand

将 CSV 数据加载到虚拟表中后,您可以生成选择语句来获取主键字段并将结果存储到变量中供您使用。

findPrimaryKeys="SELECT myPrimaryKeyField FROM my_temp_table"
 
primaryKeys=$(mysql -u username -p password -e $findPrimaryKeys)

方法二:

您甚至可以生成更新语句:

updatePrimaryKeys="UPDATE employee_info SET ... WHERE employee_info_key in (
   SELECT myPrimaryKeyField FROM my_temp_table
)"
 
mysql -u username -p password -e $updatePrimaryKeys

方法三:

通过 mysql concat 函数生成更新,将命令存储到 outfile 中并将它们加载回以执行更改:

1.生成更新语句

findPrimaryKeys="select concat('
   UPDATE employee_info 
   SET ... 
   WHERE employee_info_key = ',myPrimaryKeyField,';'
) as cmd 
from my_temp_table"

2.将更新语句存储到outfile中

mysql -u username -p password -e $findPrimaryKeys > myOutfile.sql

3. 将您的更新应用到 mysql

mysql -u username -p password myDB < myOutfile.sql

在使用或应用您的命令之前,请务必始终使用 select 语句抽查和测试您的更改。

注意:方法 3 作为审计或跟踪更改的一种方式可能更有用。特别是在您需要回滚/还原或修改所做的任何更新的情况下。


推荐阅读