导入并覆盖MySQL中的现有数据

时间:2011-04-01 19:11:28

标签: mysql import

我在MySQL表中有一个带有唯一键的数据。我想导入目前存储在CSV中的更新近期数据。如果密钥已存在,我希望覆盖旧数据,或者如果密钥不存在,则创建新行。有人知道如何在MySQL中使用它吗?

感谢您的帮助!

杰夫

3 个答案:

答案 0 :(得分:1)

使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO table (column) VALUES ('value') ON DUPLICATE KEY UPDATE column='value'

答案 1 :(得分:1)

答案 2 :(得分:0)

我正在寻找创始人确切问题的答案,我可以通过他最后的评论/问题看到他正在寻找更多的东西。它刺激了以下解决方案。

在脚本或批处理文件中嵌套另一个shell环境(例如MYSQL)会带来很多麻烦的切换语法。我倾向于寻找在一个外壳内运行的解决方案来减少这些并发症。我找到了这个命令字符串:

  

mysqlimport --fields-terminated-by =, - ignore-lines = 1 --local -uMYSQL_ACCT -pACCT_PWD YOUR_DB_NAME /PATH_TO/YOUR_TABLE_NAME.csv

我从Ja {MySQL 5.0 RefMan :: 4.5.5 mysqlimport w/Jausions Comment的评论中得到了这个想法。简而言之,您可以通过简单地在表后面命名csv文件并附加.csv扩展名,以csv格式导入数据库表。您可以附加到表中甚至覆盖行。

这是我的一个操作的真实生活csv文件内容。我喜欢在第一行中创建包含列标题的人类可读的csv文件,因此--ignore-lines = 1选项。

ID,TdlsImgVnum,SnapDate,TdlsImgDesc,ImageAvbl

,12.0.3.171-090915-1,09 / 09/2015,增强型CHI,Y

注意逗号是第一个char,使第一个字段值为“NULL”。

这是创建第二行的linux bash命令:

echo null,“$ LISTITEM”,“$ IMG_DATE”,“$ COMMENTS”,“$ AVBL”| tee -a YOUR_TABLE_NAME.csv

重要的是要知道主键id字段的空字段允许应用mysql自动增量,然后只是向表中添加一个新行。对不起,我不记得我是在某处读过这本书还是学到了很多东西:)

所以,Viola!,相反而且对这个问题更重要的是,你可以通过提供相关行的主键来覆盖整行数据。

我正处于设计新表的阵痛中,以便通过覆盖操作完全满足这些要求,但正如我所提到的,我已经使用了NULL append-a-row自动增量选项。