如何从CSV文件中获取ID并执行mysql update命令来更新mysql表中的大量更新

如何从CSV文件中获取ID并执行mysql update命令来更新mysql表中的大量更新,mysql,shell,sh,developer-tools,script,Mysql,Shell,Sh,Developer Tools,Script,我有一个名为employee_info table的mysql表,它有大量的数据,所以我必须根据id更新行,id是这个表中的主键。由于我们必须进行批量更新,是否有任何方法可以从CSV文件中获取“id”,并使用shell脚本执行更新 您可以使用mysql“加载数据填充”命令将CSV数据导入表中。查看mysql文档,了解加载时可能需要的任何其他选项。如果服务器在加载时要求将文件放在本地或服务器上的某个位置,请阅读安全要求 方法1: 在shell脚本中,可以使用以下命令加载数据: myCommand=

我有一个名为employee_info table的mysql表,它有大量的数据,所以我必须根据id更新行,id是这个表中的主键。由于我们必须进行批量更新,是否有任何方法可以从CSV文件中获取“id”,并使用shell脚本执行更新

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

方法1:

在shell脚本中,可以使用以下命令加载数据:

myCommand="LOAD DATA INFILE '/file/path/myFile.CSV' INTO TABLE my_temp_table;"
 
mysql -u username -p password -e $myCommand
一旦CSV数据加载到虚拟表中,您就可以生成select语句来获取主键字段,并将结果存储到变量中供您使用

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

您甚至可以生成update语句:

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

通过mysql concat函数生成更新,将命令存储到输出文件中,并将其加载回以执行更改:

1。生成更新语句

findPrimaryKeys="select concat('
   UPDATE employee_info 
   SET ... 
   WHERE employee_info_key = ',myPrimaryKeyField,';'
) as cmd 
from my_temp_table"
2。将更新语句存储到输出文件中

mysql -u username -p password -e $findPrimaryKeys > myOutfile.sql
3。将更新应用到mysql

mysql -u username -p password myDB < myOutfile.sql
mysql-u用户名-p密码myDB
在使用或应用命令之前,务必使用select语句对更改进行抽查和测试


注意:方法3作为审核或跟踪更改的一种方式可能更有用。尤其是当您需要回滚/还原或修改任何更新时。

将您的CSV上载到MySQL并调用SP(当然,您必须创建它),SP将此文件加载到Tentiable中,然后更新表。数据量是多少,频率是多少?csv文件的格式是否正确(逗号分隔、字符串引用、行终止、无标题)且一致(就列数而言),你说更新你也要插入吗?如果插入时遇到重复的键,你希望发生什么?请每天晚上我都要安排脚本,因为每当复制出现延迟时都会创建重复的条目,所以为了维护仪表板中的正确数据,我必须每天运行。我想在后端执行自动化操作,这是最重要的如果我可以使用CSV文件中的ID进行更新,我想要的原因