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