Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将tmp数据库中的表插入并更新到另一个数据库中的表_Mysql_Csv_Insert_Sql Update - Fatal编程技术网

Mysql 将tmp数据库中的表插入并更新到另一个数据库中的表

Mysql 将tmp数据库中的表插入并更新到另一个数据库中的表,mysql,csv,insert,sql-update,Mysql,Csv,Insert,Sql Update,我目前正在尝试将数据从csv文件加载到数据库中的表中,插入任何新条目并更新旧条目。表中有字段1作为主键的列(field1、field2、field3、field4、field5),csv的值仅包含列(field1、field2、field3)。最好的方法是什么? 目前,我正在考虑按如下方式进行处理: 在tmp中创建一个表,比如说tmp_表 使用“加载数据”在tmp_表中加载csv 使用如下查询更新旧条目 UPDATE db.table1 t INNER JOIN tmp.tmp_table s

我目前正在尝试将数据从csv文件加载到数据库中的表中,插入任何新条目并更新旧条目。表中有字段1作为主键的列(field1、field2、field3、field4、field5),csv的值仅包含列(field1、field2、field3)。最好的方法是什么? 目前,我正在考虑按如下方式进行处理:

  • 在tmp中创建一个表,比如说tmp_表
  • 使用“加载数据”在tmp_表中加载csv
  • 使用如下查询更新旧条目

    UPDATE db.table1 t INNER JOIN tmp.tmp_table s ON (t.field1=s.field1)
    SET t.field1 = s.field1, t.field2 = s.field2, t.field3 = s.field3
    
  • 插入新条目

    INSERT INTO db.table1(field1, field2, field3)
    SELECT t.field1, t.field2, t.field3 
    FROM tmp.tmp_table t 
    LEFT JOIN db.table1 v ON (t.field1=v.field1) 
    WHERE v.field1=NULL
    

对改进/优化/纠正这些步骤有何评论?

既然您使用的是MySQL,我建议您使用这种非通用解决方案

在tmp表中包括字段4和字段5

创建tmp表后,使用表1中现有记录的值更新字段4和字段5

UPDATE tmp.tmp_table s INNER JOIN db.table1 t ON (t.field1=s.field1)
SET s.field4 = t.field4, s.field5 =t.field5
然后

REPLACE INTO db.table1 VALUES (field1, field2, field3, field4, field5)
SELECT t.field1, t.field2, t.field3, t.field4, t.field5 
FROM tmp.tmp_table t