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

时间:2013-07-01 14:49:14

标签: mysql database

我每天从外部服务器收到一个MySQL转储文件.sql,我没有任何控制权。我创建了一个本地数据库来存储.sql文件中的所有数据。我希望我可以设置一个脚本来自动每天更新我的本地数据库。我每天收到的sql文件包含本地数据库中的旧数据。如何避免重复此类旧数据并仅插入本地MySQL服务器的新数据?非常感谢你!

6 个答案:

答案 0 :(得分:5)

您可以在具有相应字段的表上使用PRIMARY KEY或UNIQUE Index来停止重复记录。

  PRIMARY KEY 

使用INSERT IGNORE而不是INSERT。如果记录没有复制现有记录,MySQL会像往常一样插入它。如果记录是重复的,则IGNORE关键字告诉MySQL以静默方式丢弃它而不会产生错误。

 INSERT IGNORE

答案 1 :(得分:2)

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

答案 2 :(得分:1)

在字段上使用unique constraints,您希望它是唯一的。 另外,正如Danny Beckett所提到的,为了避免输出错误(我希望将其重定向到文件以供将来分析,检查,如果我没有错过任何进程),您可以使用INSERT IGNORE构造而不是INSERT

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

请参阅http://dev.mysql.com/doc/refman/5.5/en/insert.html

答案 5 :(得分:0)

如果这是一个简单的vanilla mysqldump文件,那么它通常包含DROP TABLE IF EXISTS...语句和create table语句,因此在导入数据时会重新创建表。所以重复的数据应该不是问题,除非我遗漏了什么。