如何在更新MySQL数据库时避免重复?

如何在更新MySQL数据库时避免重复?,mysql,database,Mysql,Database,我每天都从一个外部服务器收到一个MySQL转储文件.sql,我无法控制它。我创建了一个本地数据库,将所有数据存储在.sql文件中。我希望我可以设置一个脚本,每天自动更新我的本地数据库。我每天收到的sql文件包含本地数据库中已经存在的旧数据。如何避免重复这些旧数据,而只向本地MySQL服务器插入新数据?多谢各位 在要唯一的字段上使用。 另外,正如Danny Beckett所提到的,为了避免输出中的错误(我更愿意将其重定向到文件中以供将来分析,如果我在处理过程中没有遗漏任何内容,则进行检查),您可以

我每天都从一个外部服务器收到一个MySQL转储文件.sql,我无法控制它。我创建了一个本地数据库,将所有数据存储在.sql文件中。我希望我可以设置一个脚本,每天自动更新我的本地数据库。我每天收到的sql文件包含本地数据库中已经存在的旧数据。如何避免重复这些旧数据,而只向本地MySQL服务器插入新数据?多谢各位

在要唯一的字段上使用。
另外,正如Danny Beckett所提到的,为了避免输出中的错误(我更愿意将其重定向到文件中以供将来分析,如果我在处理过程中没有遗漏任何内容,则进行检查),您可以使用
INSERT IGNORE
construct而不是
INSERT

您可以使用第三方数据库比较工具(例如来自Red Gate的工具)创建两个数据库,一个是当前数据库(您的“主数据库”)和新转储数据库。然后,您可以在两个版本之间运行比较工具,并仅更新它们之间的更改,从而更新主版本。

您可以使用IGNORE语句支持的约束

第二个选项,您可以首先将数据插入临时表。然后只插入差异


使用第二个选项,您可以使用一些限制,不通过添加存储在数据库中的记录来搜索重复

您需要在表中创建主键。它应该是列值的唯一组合。将INSERT查询与IGNORE一起使用将避免在此表中添加重复项


请参见

如果这是一个普通的mysqldump文件,那么它通常包括
DROP TABLE If EXISTS…
语句和create TABLE语句,以便在导入数据时重新创建表。所以重复数据应该不是问题,除非我遗漏了什么。

可能重复的@Stephan我删除了我的答案,因为Ganesh的答案更好,但谢谢
:)
@Stephan:每个答案可能都会给出一个完整的解决方案,或者至少提到另一个答案,它包含了解决方案的其余部分…@DannyBeckett,顺便问一下,为什么它不能插入?重复的记录将产生错误,其余的“INSERT”语句将很好地工作。@DavidJashi你说得很好,很抱歉!我删除了我的否决票。+1很好的选择,但我认为这是一个“过度杀伤力”为当前context@Stephan谢谢OP没有就DB有多大,他想更新哪些/多少表发表任何评论。发布的所有其他解决方案都假定每个表中有一个主键,而比较工具不需要主键。