我在MySQL表中有一个带有唯一键的数据。我想导入目前存储在CSV中的更新近期数据。如果密钥已存在,我希望覆盖旧数据,或者如果密钥不存在,则创建新行。有人知道如何在MySQL中使用它吗?
感谢您的帮助!
杰夫
答案 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选项。
注意逗号是第一个char,使第一个字段值为“NULL”。
这是创建第二行的linux bash命令:
重要的是要知道主键id字段的空字段允许应用mysql自动增量,然后只是向表中添加一个新行。对不起,我不记得我是在某处读过这本书还是学到了很多东西:)
所以,Viola!,相反而且对这个问题更重要的是,你可以通过提供相关行的主键来覆盖整行数据。
我正处于设计新表的阵痛中,以便通过覆盖操作完全满足这些要求,但正如我所提到的,我已经使用了NULL append-a-row自动增量选项。